用于为模型设置JSON属性的非弃用方法

时间:2013-10-16 01:11:52

标签: json ruby-on-rails-3

我想设置一个任意属性来渲染到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正确呈现?

2 个答案:

答案 0 :(得分:1)

Model模型中,输入

attr_accessor :extra_info

然后在控制器中

model.extra_info = "more detail"

答案 1 :(得分:0)

Nick在上面的答案是创建结构良好,文档齐全的代码方面最好的。

<强>更新 * 以下 *

似乎我错了

以下代码仍会在我的开发服务器上创建弃用警告。

在这种特殊情况下,我不希望为特定的一次性案例添加额外的访问器来填充模型,所以我正在使用

s.send(:write_attribute, :extra_info, "more detail")

帮助者内部,控制器内部。