Ruby on rails RubyonRails:为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

在我的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 :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