Ruby on rails RubyonRails:为JSON序列化向对象添加瞬态属性时出现问题
在我的Item controller中,我希望在将模型对象呈现为JSON之前,向模型对象添加一个瞬态(即非持久性)属性Ruby on rails RubyonRails:为JSON序列化向对象添加瞬态属性时出现问题,ruby-on-rails,ruby,json,Ruby On Rails,Ruby,Json,在我的Item controller中,我希望在将模型对象呈现为JSON之前,向模型对象添加一个瞬态(即非持久性)属性 def show @item = Item.find(params[:id]) @item.comment = "some comment" render :json => @item end 我的Item类如下所示: class Item < ActiveRecord::Base attr_accessor :commen
def show
@item = Item.find(params[:id])
@item.comment = "some comment"
render :json => @item
end
我的Item类如下所示:
class Item < ActiveRecord::Base
attr_accessor :comment
@comment
我很想知道这是否与您的想法一致,Chubas。我建议您自己构造要转换为json的对象。这将消除您在评论中遇到的问题,并防止您意外地公开您不想提供的信息 比如:
render :json => {
:item => {
:name => 'Some Item',
...
:comment => 'Some Comment
}
}
如果您希望对渲染内容有更多的控制,而不是在控制器中创建json对象(糟糕的设计),请将方法
重写为_json
,调用super并使用方法
选项包括:comment
。您可以看到默认行为您应该可以通过使用:include来执行此操作
@item.to_json(:include => :comments)
或:方法
@item.to_json(:methods => :comments)
我认为您不应该覆盖to_json方法。为什么不在调用_json之前将属性添加到对象的散列中呢
@object[:new_attr] = value
请参阅这篇类似的帖子,也请参阅。。。“您通常想让_json单独处理,所以您需要做的就是添加您自己的as_json实现,就像这样…”您好,谢谢您的回复。。我希望实现这种方法,但我发现自己在试图弄清楚被重写的as_json方法应该是什么样子的问题上一直在摸索。你有没有可能再进一步描述一下这个解决方案?再次感谢。
@object[:new_attr] = value