2010-10-13 5 views
0

Je travaille sur une application rails3 et je suis un peu confondu avec Active Model. Voici mon modèle:ActiveModel :: définition des attributs de nommage

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 

La fonction get_elig retourner un Hash comme celui-ci: {"foo1"=>"bar1", "foo2"=>"bar2", "foo"=>"bar"}

Sous la console 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> 

Ma question est simple: ce qui se passait mal avec mon modele ?

Merci pour votre aide.

Répondre

0

Comme vous l'avez dit: MyClass.all renvoie un objet de hachage et vous ne pouvez pas utiliser la notation par points sur un hachage.

Ce que vous voulez probablement est d'initialiser votre classe avec le hachage: x = MyClass.new ({"foo1" => "bar1"}). Maintenant, vous avez accès avec la notation par points comme le suggère l'implémentation.

+0

Non exactly.MyClass.all appeler un api SOAP et retourne un hachage de l'objet. Ce que je voulais faire était de convertir hash [key] en hash.key. Après avoir fait cela avec ma propre méthode, j'ai utilisé la gemme Hashie qui m'a sauvé la vie. – jjmartres

0

Pas exactement. MyClass.all appelle une API SOAP et retourne un hachage d'objet.

Je voulais convertir hash['key'] en hash.key. Après avoir fait cela avec ma propre méthode, j'ai utilisé ce Gem qui m'a sauvé la vie.

espoir qui aide quelqu'un :)

Questions connexes