1

我正在尝试使用 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>

使用静态数组可以正常工作。

是否可以替换该静态数组?我想从管理员填充的另一个模型中读取这些值,而不必触及新值的代码。也可以使用其他方法来完成同样的事情!谢谢你的时间。

4

1 回答 1

0

我怀疑数组 [author, rating, runtime] 不是 Product 类中的列。它们被定义为 Product 类的属性。您是否尝试将 L#7 从“attr_accessible key”替换为“attr_accessor key”?

谢谢。

于 2014-10-21T06:50:18.603 回答