ActiveModel :: Определение атрибутов именования - PullRequest
0 голосов
/ 14 октября 2010

Я работаю над приложением 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>

Мой вопрос прост: что не так с моей моделью?

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 15 октября 2010

Не совсем.

MyClass.all вызывает API-интерфейс SOAP и возвращает хеш объекта.

Я хотел преобразовать hash['key'] в hash.key. После этого, используя мой собственный метод, я использовал Gem , который спас мне жизнь.

Надеюсь, что кому-то поможет :)

0 голосов
/ 14 октября 2010

Как вы сказали: MyClass.all возвращает хеш-объект, и вы не можете использовать точечную запись в хеш-коде.

Что вам, вероятно, нужно, это инициализировать ваш класс с помощью хеша: x = MyClass.new ({"foo1" => "bar1"}).Теперь у вас есть доступ с точечной нотацией, как предполагает реализация.

...