0

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

在导轨控制台下:

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>

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

感谢帮助。

4

2 回答 2

0

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

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

于 2010-10-14T07:47:40.647 回答
0

不完全是。

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

我想做的是转换hash['key']hash.key. 在使用我自己的方法完成此操作后,我使用了这颗挽救了我生命的宝石

希望对某人有所帮助:)

于 2010-10-15T12:02:33.740 回答