2012-12-31 12 views
13

Sto cercando di sideload dati in active_model_serializer per un'applicazione Ember e ottenere un NoMethodError quando tento di includere gli oggetti:Rails/Ember - active_model_serializer - metodo non definito `oggetto' quando sideloading

metodo non definito` oggetto' per #email: 0x00000100d33d20

succede solo quando: include => true viene impostato, in questo modo:

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

I miei modelli simile a questa:

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 

mio regolatore di simile a questa:

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

Grazie in anticipo.

+3

Dov'è il tuo 'EmailSerializer'? Se stai cercando di incorporare una versione serializzata di un'istanza 'Email', sono abbastanza sicuro che sia necessario' Email' per avere un serializzatore associato. 'object' esiste solo all'interno delle classi estendendo' ActiveModel :: Serializer'. – deefour

+1

Hai ragione; Stavo aspettando il timeout della domanda per rispondere a questo nel caso in cui qualcun altro ha il problema. Grazie! – user1938736

risposta

26

Come Deefour menzionato sopra, assicurati di avere un serializzatore per qualsiasi oggetto sideloaded. In questo caso, creando EmailSerializer:

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

Esattamente il problema e la soluzione per me. Mi piace quando un errore ti dice chiaramente cosa c'è che non va! ;) Se l'errore si fosse lamentato per la mancanza della classe 'EmailSerializer', avrei subito capito cosa avevo fatto di sbagliato! – Nick