2015-02-06 5 views
0

의사의 PIN이 모델 협회 (중첩 바인드합니다 같은) 내가레일 4 해시

pseudo User.first.with(:books) 


result => Hash {user: {name: "john_doe", 
        books: {0: {title: "book"}}}} 

은 내가 어떻게 이것을 달성 할 수있다 원하는 것은

model User 
    has_many :books 
model Book 
    belongs_to :user 

?

EDIT 

내가 거의 다 해요 : User.preload (: 책) 좁은 방 - 지금 중첩, 만에> retrives 모델 방법으로 위를 serialilze하는? 수정 완료 했습니다! 이 같은 as_json을 사용할 수 있습니다

user = User.preload(:books).first 
hash = user.as_json 
books = user.books 
x = Hash[(0...books.size).zip books] 
hash[:books] = x 

답변

0

응용 프로그램이 함께/모델/user.rb

class User < ActiveRecord::Base 
    has_many :books 

    def as_json(options = nil) 
    super({ only: [:id, :name], include: :books }) 
    end 
end 

:

>> User.first.as_json 
=> {"id"=>1, "name"=>"john_doe", "books"=>[ 
    {"user_id"=>1, "id"=>1, "title"=>"book", 
    "created_at"=>Fri, 06 Feb 2015 09:25:12 UTC +00:00, 
    "updated_at"=>Fri, 06 Feb 2015 09:25:12 UTC +00:00}]} 
>> 

유사한 결과를 제공하는 어떤 보석도 있습니다. 더 자세한 정보는 http://robots.thoughtbot.com/better-serialization-less-as-json을보십시오.

+0

위대하고 정확한 답변! (부당한 대표로 인해 슬퍼 할 수 없습니다) – ClassyPimp

+0

고마워요! 답을 수락하십시오 (상/하 버튼 아래에있는 버튼입니다). 질문을하는 사람은 누구나 대답을 수락 할 수 있습니다. Up- and Downvoting은 그 다음 단계 일뿐입니다. – wintermeyer