定义与自定义名称相关的多个setter方法

时间:2017-03-22 13:18:10

标签: ruby-on-rails ruby

我想定义多个自定义方法来为UserConcern中的自定义用户字段设置值,这些字段不存储在数据库中,而是从外部源获取。我尝试了下面的代码,结果是“&#39 ;: undefined局部变量或方法get_custom_attrs' for UserConcern:Module (NameError)

get_custom_attrs.each do |key|
  define_method(key) do
    // returning the value for this key
  end
end

private

def get_custom_attrs
  OuterConcern::FIELDS - User.attribute_names
end

我显然无法在顶层使用此方法。如果我切换到在关注点内使用常量变量,例如CUSTOM_FIELDS = [:custom1, custom2, ...]将起作用,但它不是动态的,并且每次更改,添加或更改字段时我都必须更改它删除。

1 个答案:

答案 0 :(得分:0)

get_custom_attrs正在类级别执行,而def get_custom_attrs在实例级别定义方法。您需要get_custom_attrs作为类方法存在,因此您需要类似

的内容
class MyAwesomeClass
  class << self
    private
    def get_custom_attrs
      [:a1,:a2,:a3] # or whatever
    end
  end
  get_custom_attrs.each do |attr|
    # Some stuff happens here
  end
end