2012-12-31 23 views
13

Tôi đang cố gắng để sideload dữ liệu trong active_model_serializer cho một ứng dụng Ember và có được một NoMethodError khi tôi cố gắng bao gồm các đối tượng:Rails/Ember - active_model_serializer - Phương pháp xác định 'đối tượng' khi sideloading

phương pháp xác định ' đối tượng' cho #email: 0x00000100d33d20

Nó chỉ xảy ra khi: bao gồm => đúng được thiết lập, như thế này:

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

Mô hình của tôi trông như thế này:

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 

điều khiển của tôi trông như thế này:

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

Cảm ơn trước.

+3

'Trình xử lý email của bạn' ở đâu? Nếu bạn đang cố gắng nhúng một phiên bản được tuần tự hóa của một cá thể 'Email', tôi chắc chắn bạn cần' Email' để có một bộ nối tiếp liên quan. 'object' chỉ tồn tại trong các lớp mở rộng' ActiveModel :: Serializer'. – deefour

+1

Bạn đúng; Tôi đã chờ đợi thời gian chờ câu hỏi để trả lời câu hỏi này trong trường hợp bất kỳ ai khác có vấn đề. Cảm ơn! – user1938736

Trả lời

26

Như Deefour đã đề cập ở trên, hãy đảm bảo bạn có bộ nối tiếp cho bất kỳ đối tượng được tải trước nào. Trong trường hợp này, việc tạo EmailSerializer:

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

Chính xác là vấn đề và giải pháp cho tôi. Tôi thích nó khi một lỗi rõ ràng cho bạn biết có gì sai! ;) Đã có lỗi phàn nàn về một lớp 'EmailSerializer' còn thiếu, tôi sẽ ngay lập tức nhận được những gì tôi đã làm sai! – Nick