我正在使用rails3应用程序而且我对Active Model有点困惑。 这是我的模特:
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"}
在rails控制台下:
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 :(得分:0)
正如你所说:MyClass.all返回一个哈希对象,你不能在哈希上使用点表示法。
你可能想要的是用哈希值初始化你的类:x = MyClass.new({“foo1”=&gt;“bar1”})。现在,您可以使用点表示法访问,因为实现建议。
答案 1 :(得分:0)
不完全是。
MyClass.all调用SOAP API并返回对象的哈希值。
我想要做的是将hash['key']
转换为hash.key
。在用我自己的方法做这个之后,我使用了这个Gem来拯救我的生命。
希望能帮助某人:)