我想定义多个自定义方法来为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, ...]
将起作用,但它不是动态的,并且每次更改,添加或更改字段时我都必须更改它删除。
答案 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