我正在尝试在Rails 3.0.2中控制用户对象的JSON呈现。这是相关的型号代码:
class User < ActiveRecord::Base
belongs_to :employer
has_and_belongs_to_many :roles
def as_json(options={})
super(options.merge(:include => [:employer, :roles]))
end
end
这是我得到的JSON表示:
{"user":{"employer":{},"roles":[{},{},{}],"email":"user.user@example.com"}}
此用户确实有三个角色,因此:include
语句以某种方式查找关联,但角色和雇主对象未转换为JSON。
如果我对其中任何一个模型都有as_json
,返回垃圾,它仍然没有出现。
我做错了什么,或者这是一个错误? (在我从Rails 3.0.0升级之前,它没有为关联呈现任何内容,我从this question学到了这一点。)
答案 0 :(得分:5)
您可以尝试:
to_json(:include => [:employer, :roles])
代替as_json
http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html
答案 1 :(得分:3)
我仍然不确定它为什么不起作用,但我的解决方法是手动构建我想要的表示。
def serializable_hash(options={})
hash_info = super(options)
hash_info[:employer] = {:name => employer.name}
hash_info[:roles] = roles
hash_info
end
我正在使用serializable_hash
因为这是一个更通用的方法,Rails可以从中生成JSON或XML等等。但是,如果将名称更改为as_json
,则方法的作用相同。