我正在尝试使用 RailsCast #345 (Hstore) 中的元编程示例代码,并将静态数组替换为从应用程序中的另一个(不相关)模型生成的数组。Ryan 的代码示例是:
class Product < ActiveRecord::Base
attr_accessible :name, :category, :price, :description
# store_accessor :properties, :author
%w[author rating runtime].each do |key|
attr_accessible key
define_method(key) do
properties && properties[key]
end
define_method("#{key}=") do |value|
self.properties = (properties || {}).merge(key => value)
end
end
end
我想用类似%w[author rating runtime]
的东西替换上面的内容,Foo.pluck(:content).map(&:downcase)
但这不起作用。尝试访问动态方法时出现方法未定义错误。例如调用时
@product.send(foo.content.downcase) # <-- which returns "author"
我得到:
undefined method `author' for #<Product:0x007ff111df0908>
使用静态数组可以正常工作。
是否可以替换该静态数组?我想从管理员填充的另一个模型中读取这些值,而不必触及新值的代码。也可以使用其他方法来完成同样的事情!谢谢你的时间。