覆盖as_json没有效果?

我试图在我的一个模型中覆盖as_json,部分是为了包含来自另一个模型的数据,部分是为了去除一些不必要的字段。 从我所看到的,这是Rails 3中的首选方法。为了简单起见,让我说我有类似的东西:

class Country  [:id,:name] ) end end 

而在我的控制器中

 def show respond_to do |format| format.json { render :json => @country } end end 

然而,无论我尝试什么,输出始终包含完整数据,字段不会被“:only”子句过滤。 基本上,我的覆盖似乎没有开始,但如果我改变它,说…

 class Country < ActiveRecord::Base def as_json(options={}) {foo: "bar"} end end 

…我确实得到了预期的JSON输出。 我只是弄错了语法吗?

这是一个错误,但没有奖品:

https://rails.lighthouseapp.com/projects/8994/tickets/3087

在控制器动作中进行一些进一步的测试:

 format.json { render :json => @country } 

在模型中:

 class Country < ActiveRecord::Base has_many :languages def as_json(options={}) super( :include => [:languages], :except => [:created_at, :updated_at] ) end end 

输出:

 { created_at: "2010-05-27T17:54:00Z" id: 123 name: "Uzbekistan" updated_at: "2010-05-27T17:54:00Z" } 

但是,明确地将.to_json()添加到类中的render语句,并覆盖模型中的to_json(而不是as_json)会产生预期的结果。 有了这个:

 format.json { render :json => @country.to_json() } 

在我的控制器操作中,以及模型中的下面,覆盖工作:

 class Country < ActiveRecord::Base has_many :languages def to_json(options={}) super( :include => [:languages], :except => [:created_at, :updated_at] ) end end 

输出…

 { id: 123, name: "Uzbekistan", languages: [ {id: 1, name: "Swedish"}, {id: 2, name: "Swahili"} ] } 

……这是预期的产出。 我发现了一个错误吗? 我赢了奖吗?