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 了解更多信息。
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 了解更多信息。