2010-10-13 100 views
0

我正在开发一个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> 

我的问题很简单:用了什么事错我的模特?

感谢您的帮助。

回答

0

正如你所说:MyClass.all返回一个散列对象,你不能在散列上使用点符号。

你可能想要的是用哈希初始化你的类:x = MyClass.new({“foo1”=>“bar1”})。现在,您可以按照实施建议使用点符号进行访问。

+0

不是.MyClass.all调用SOAP API并返回对象的散列。我想做的是将hash ['key']转换为hash.key。在用我自己的方法做这件事之后,我使用了拯救了我生命的Hashie宝石。 – jjmartres 2010-10-15 11:59:18

0

不完全。

MyClass.all调用SOAP API并返回对象的散列。

我想要做的是将​​转换为hash.key。做完这个后,我用自己的方法,我用这个Gem拯救了我的生命。

希望可以帮助某人:)