rails 4 检索模型与散列中的关联(作为嵌套属性)

rails 4 retrive model with association (as nested attrs) in hash

pseudo

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(:books).first -> 检索嵌套模型, 但现在如何像上面那样序列化它? 编辑 已经做到了!

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

app/models/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}]}
>> 

还有一些 gem 提供了类似的结果。查看 http://robots.thoughtbot.com/better-serialization-less-as-json 了解更多信息。