2015-02-06 117 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