0

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 が適切にレンダリングされるように、コントローラがこのデータをモデルにプッシュする正しい方法は何でしょうか?

4

2 に答える 2

1

Modelモデルでは、

attr_accessor :extra_info

次にコントローラーで

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

上記のニックの答えは、よく構造化され、よく文書化されたコードを作成するという点で最高です。

更新 *以下で間違っていたようです*

以下のコードは、私の開発サーバーで非推奨の警告を作成します。

この特定のケースでは、非常に特定の 1 回限りのケースのために余分なアクセサーでモデルを混乱させたくないので、私は使用しています

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

ヘルパー内、コントローラー内。

于 2013-10-22T03:10:34.740 に答える