为什么我的关联没有呈现给JSON?

时间:2011-07-06 20:00:02

标签: ruby-on-rails json ruby-on-rails-3

我正在尝试在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学到了这一点。)

2 个答案:

答案 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,则方法的作用相同。