ActiveModel ::命名属性定义
问题描述:
我正在开发一个rails3应用程序,我对Active Model有点困惑。 这里是我的模型:ActiveModel ::命名属性定义
class MyClass
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :foo, :foo1, foo2
def initialize(attributes = {})
attributes.each { |key, value| send "#{key}=", value }
end
def self.all
get_elig
end
private
def self.get_elig
# My function
end
end
的get_elig
函数返回一个哈希像这样:{"foo1"=>"bar1", "foo2"=>"bar2", "foo"=>"bar"}
下轨控制台:
irb(main):031:0> t = MyClass.all
=> {"foo1"=>"bar1", "foo2"=>"bar2", "foo"=>"bar"}
irb(main):032:0> t.foo
NoMethodError: undefined method `foo' for #<Hash:0x105e96be0>
我的问题很简单:用了什么事错我的模特?
感谢您的帮助。
答
正如你所说:MyClass.all返回一个散列对象,你不能在散列上使用点符号。
你可能想要的是用哈希初始化你的类:x = MyClass.new({“foo1”=>“bar1”})。现在,您可以按照实施建议使用点符号进行访问。
不是.MyClass.all调用SOAP API并返回对象的散列。我想做的是将hash ['key']转换为hash.key。在用我自己的方法做这件事之后,我使用了拯救了我生命的Hashie宝石。 – jjmartres 2010-10-15 11:59:18