ActiveModel ::命名属性定义

时间:2010-10-13 21:07:35

标签: ruby-on-rails ruby ruby-on-rails-3 activemodel

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

我的问题很简单:我的模型出了什么问题?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

正如你所说:MyClass.all返回一个哈希对象,你不能在哈希上使用点表示法。

你可能想要的是用哈希值初始化你的类:x = MyClass.new({“foo1”=&gt;“bar1”})。现在,您可以使用点表示法访问,因为实现建议。

答案 1 :(得分:0)

不完全是。

MyClass.all调用SOAP API并返回对象的哈希值。

我想要做的是将hash['key']转换为hash.key。在用我自己的方法做这个之后,我使用了这个Gem来拯救我的生命。

希望能帮助某人:)