2012-12-31 12 views
13

Próbuję sideload dane active_model_serializer dla aplikacji Ember i uzyskać NoMethodError gdy próbuję obejmują obiekty:Rails/Ember - active_model_serializer - niezdefiniowana metoda `obiekt”, gdy sideloading

metoda niezdefiniowany ` obiekt”dla #email: 0x00000100d33d20

to zdarza się tylko wtedy, gdy: include => true jest ustawiony w następujący sposób:

class ContactSerializer < ActiveModel::Serializer 
    embed :ids, :include => true 
    attributes :first_name, :last_name 
    has_many :emails 
end 

Moje modele wyglądać następująco:

class Contact < ActiveRecord::Base 
    attr_accessible :first_name, :last_name, :company, 
    belongs_to :account 
    belongs_to :user 
    has_many :emails 
end 

class Email < ActiveRecord::Base 
    attr_accessible :email_address, :email_type_id, :is_primary 
    belongs_to :contact 
end 

Mój kontroler wygląda następująco:

def show 
    @contact = @current_user.contacts.where(:id => params[:id]).includes(:emails).first 
    render :json => @contact 
end 

góry dziękuję.

+3

Gdzie jest twój 'EmailSerializer'? Jeśli próbujesz osadzić serializowaną wersję instancji 'Email', jestem pewien, że potrzebujesz' Email', aby mieć powiązany serializator. 'object' istnieje tylko w klasach rozszerzających' ActiveModel :: Serializer'. – deefour

+1

Masz rację; Czekałem na odpowiedź na pytanie o to pytanie na wypadek, gdyby ktoś inny miał problem. Dzięki! – user1938736

Odpowiedz

26

Jak wspomniano wcześniej w Deefour, upewnij się, że masz serializator dla wszelkich pobocznych obiektów. W takim przypadku utworzenie EmailSerializer:

class EmailSerializer < ActiveModel::Serializer 
    attributes :id, :email_address 
end 
+0

Dokładnie problem i rozwiązanie dla mnie. Uwielbiam to, gdy błąd wyraźnie mówi ci, co jest nie tak! ;) Gdyby błąd narzekał na brakującą klasę "EmailSerializer", natychmiast otrzymałbym to, co zrobiłam źle! – Nick

Powiązane problemy