我想设置一个任意属性来渲染到JSON。
我已经按照这个问题的答案:how to append data to json in ruby/rails?来做
model = Model.find
model[:extra_info] = "More detail."
model.to_json
它完美无缺,但在我的测试中,我收到了一个弃用警告,即不再支持设置任意属性,请使用attr_writer。
我尝试使用
model.write_attribute(:extra_info, "More detail.")
适用于单元测试,但在服务器上引发异常:
private method `write_attribute' called for Model
这种非弃用的干净方法是什么。
我知道我可以使用Add virtual attribute to json output中的方法在JSON调用中设置它,但在这种情况下,要添加的变量不是模型关注的一部分,因此它无法访问构建额外属性所需的数据,这样做会非常麻烦。
那么控制器将这些数据推送到模型中的正确方法是什么,以便JSON正确呈现?
答案 0 :(得分:1)
在Model
模型中,输入
attr_accessor :extra_info
然后在控制器中
model.extra_info = "more detail"
答案 1 :(得分:0)
Nick在上面的答案是创建结构良好,文档齐全的代码方面最好的。
<强>更新强> * 以下 *
似乎我错了以下代码仍会在我的开发服务器上创建弃用警告。
在这种特殊情况下,我不希望为特定的一次性案例添加额外的访问器来填充模型,所以我正在使用
s.send(:write_attribute, :extra_info, "more detail")
帮助者内部,控制器内部。