私はテーブルレスモデルを持っています(#219 railscastに示されているように):
class MyModel
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :attr1, :attr2, :attr3, :attr4
private
def initialize(attr1 = nil)
self.attr1 = attr1
end
def persisted?
false
end
end
次に、コントローラーでJSONをレンダリングしようとしています。
@my_model = MyModel.new
render json: @my_model.to_json(only: [:attr1, :attr2])
ただし、モデルのすべての属性を使用してJSONをレンダリングします。
追加しようとしました
include ActiveModel::Serialization
ただし、レンダリングされたJSONは変更されませんでした。
テーブルレスモデルの必要な属性のみを使用してJSONをレンダリングするにはどうすればよいですか?
Rails3.2.3を使用しています
アップデート
みんなありがとう。あなたはほとんど大丈夫のようです。私はあなたのソリューションを組み合わせてこれを手に入れました:
モデル:
include ActiveModel::Serialization
...
def to_hash
{
attr1: self.attr1,
attr2: self.attr2,
...
}
end
コントローラ:
render json: @my_model.to_hash.to_json(only: [:attr1, :attr2])
誰の答えが受け入れられるのか本当にわかりません。
アップデート2
突然、新しい奇妙さが現れました。属性の1つは、ハッシュの配列です。こんな感じでした:
attr1: [[{name: "name", image: "image"}, {name: "name", image: "image"}],
[{name: "name", image: "image"}, {name: "name", image: "image"}]]
しかし、今ではすべてのコンテンツが失われ、次のようになります。
attr1: [[{}, {}], [{}, {}]]
多分誰かがそれを修正する方法を知っていますか?
アップデート3 :)
エレズ・ラビの答えが役に立ちました。問題を解決するslice
代わりに使用する。to_json
したがって、最終的な解決策は次のとおりです。
render json: @my_model.to_hash.slice(:attr1, :attr2)