2015-02-06 116 views
0

僞retrive模型協會(嵌套ATTRS)軌道4哈希

model User 
    has_many :books 
model Book 
    belongs_to :user 

我想是

pseudo User.first.with(:books) 


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

我怎樣才能做到這一點?

EDIT 

我幾乎沒有:User.preload(:書籍)。首先 - > retrives嵌套, 但現在模型如何serialilze它上面的? EDIT ve done it!

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 

這樣,您可以使用as_json這樣的:

>> 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 2015-02-06 17:57:59

+0

謝謝!請接受答案(這是上下按鈕下方的按鈕)。任何提問的人都可以接受答案。 Up-和Downvoting只是下一步之後。 – wintermeyer 2015-02-06 21:56:59