我無表格模型(就像是在#顯示219 railscast):無表模型JSON序列中的Rails
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?
我用Rails 3.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
新突然出現了陌生感。其中一個屬性是散列數組。它是這樣的:
attr1: [[{name: "name", image: "image"}, {name: "name", image: "image"}],
[{name: "name", image: "image"}, {name: "name", image: "image"}]]
但現在失去了所有的內容,看起來像這樣:
attr1: [[{}, {}], [{}, {}]]
也許任何人都知道如何解決它?
更新3 :)
埃雷茲Rabih的回答幫助。用slice
代替to_json
解決了這個問題。所以,最終的解決方案是:
render json: @my_model.to_hash.slice(:attr1, :attr2)
我想這裏不會有任何集合或方法:屬性... – bender 2012-07-07 11:31:44