传递参数到Ruby中包含的模块?

前端之家收集整理的这篇文章主要介绍了传递参数到Ruby中包含的模块?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望实现像所有伟大的插件那样的红宝石,所以你可以这样做:
acts_as_commentable
has_attached_file :avatar

但我有一个约束:

That helper method can only include a module; it can’t define any variables or methods.

这样做的原因是因为我想要选项哈希来定义类似的东西,并且可以转换成一个说20个不同的’主力’模块,所有这些都可以这样总结一下:

def dynamic_method(options = {})
 include ("My::Helpers::#{options[:type].to_s.camelize}").constantize(options)
end

那么那些“马”就可以处理这些选项,做如下事情:

has_many "#{options[:something]}"

这是结构的样子,我想知道如果你知道在拼图中缺少的部分:

# 1 - The workhorse,encapsuling all dynamic variables
module My::Module
  def self.included(base)
    base.extend ClassMethods
    base.class_eval do
      include InstanceMethods
    end
  end

  module InstanceMethods
    self.instance_eval %Q?
      def #{options[:my_method]}
        "world!"
      end
    ?
  end

  module ClassMethods
  end
end

# 2 - all this does is define that helper method
module HelperModule
  def self.included(base)
    base.extend(ClassMethods)
  end

  module ClassMethods

    def dynamic_method(options = {})
      # don't know how to get options through!
      include My::Module(options)
    end

  end
end

# 3 - send it to active_record
ActiveRecord::Base.send(:include,HelperModule)

# 4 - what it looks like
class TestClass < ActiveRecord::Base
  dynamic_method :my_method => "hello"
end

puts TestClass.new.hello #=> "world!"

那个%Q我不完全确定如何使用,但我基本上只是想以某种方式将选项哈希从该帮助方法传递到workhorse模块.那可能吗?这样,主机模块可以定义各种功能,但是我可以在运行时为所需的变量命名变量.

解决方法

你可能想看看 Modularity宝石,这完全是你想要的.
原文链接:https://www.f2er.com/ruby/271438.html

猜你在找的Ruby相关文章