0

我想设置一个任意属性以渲染为 JSON。

我遵循了这个问题的答案:如何在 ruby​​/rails 中将数据附加到 json?去做

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

什么是不弃用的干净方式来做到这一点。

我知道我可以在 JSON 调用中使用Add virtual attribute to json output中的方法设置它,但在这种情况下,要添加的变量不是模型关注的一部分,因此它无法访问数据需要构造额外的属性,这样做会很讨厌和混乱。

那么控制器将这些数据推送到模型中以便正确呈现 JSON 的正确方法是什么?

4

2 回答 2

1

Model模型中,放

attr_accessor :extra_info

然后在控制器中

model.extra_info = "more detail"
于 2013-10-16T01:42:46.773 回答
0

就创建结构良好、记录良好的代码而言,尼克的上述回答是最好的。

更新 *看来我在下面是错的*

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

在这种特殊情况下,我不想在非常具体的一次性案例中使用额外的访问器将模型弄乱,所以我正在使用

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

在助手内部,在控制器内部。

于 2013-10-22T03:10:34.740 回答