我正在使用構建組合框的JavaScript庫。 我有要求打一個組合框姓名的一個人,所以我的意思是名+姓。我想知道是否有一個快速的方法(而不是手動構建所有的哈希對象)來「模擬」一個額外的字段的存在,我想知道是否有一個快速的方法(而不是手動構建所有的哈希對象)在我的JSON轉換模型中,因爲必須將此對象作爲JSON數組返回,您可以在其中讀取* full_name *作爲鍵。應該包含在JSON序列化中的自定義模型方法
感謝您的幫助
我正在使用構建組合框的JavaScript庫。 我有要求打一個組合框姓名的一個人,所以我的意思是名+姓。我想知道是否有一個快速的方法(而不是手動構建所有的哈希對象)來「模擬」一個額外的字段的存在,我想知道是否有一個快速的方法(而不是手動構建所有的哈希對象)在我的JSON轉換模型中,因爲必須將此對象作爲JSON數組返回,您可以在其中讀取* full_name *作爲鍵。應該包含在JSON序列化中的自定義模型方法
感謝您的幫助
你可以通過:methods
選項覆蓋模型中的to_json方法和致電super
。這將會調用as_json
版本的超類:methods
選項,以便它將序列化您的模型與full_name
屬性。
class Person < ActiveRecord::Base
def as_json(options={})
options[:methods] = [:full_name]
super
end
def full_name
"#{first_name} #{last_name}"
end
end
內部控制器,你可以簡單地
render :json => @person
檢查,如果你想這個文件出來就知道可以傳遞給as_json
方法更多的選擇。 http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html
你可以做的是有一個setter方法在User類,像這樣
def full_name=(string)
names = string.split # the default delimiter is a space
self.update_attributes(:first_name => names[0], :last_name => names[1])
end
形式應該再參考:full_name
作爲一個領域,即使它不是一個實際的列,Rails將自動訪問上面的方法並執行它,從而更新您實際需要的列。
對不起,這不是我的意思,我需要相反的看法:讀取full_name並將其寫入JSON對象,而不是將我的json對象轉換爲rails模型對象。 –
這似乎是這個問題的一個副本:
Rails 3 respond_to json, with custom attributes/methods
具體的:方法哈希:
respond_with({
:cars => @cars.as_json(:only => [:make, :model], :methods => [:full_name]),
:vans => @vans
})
我不能合併2答案,但你也有用。 Chamnap更適合我的情況,但您的回答對於您希望在json轉換中包含方法「臨時」(因爲它們作爲選項而不是覆蓋進行傳遞)的情況很有用。 –
不錯的回答夥伴,好的例子。給我一秒鐘測試,但我認爲會優雅地工作。 –
如果這是正確的,有助於打勾我的答案。謝謝:) – Chamnap
Obviusly;)你的回答是正確的,但我忘了提及一件事情,如果我想**省略** JSON轉換的一些領域,以避免帶寬消費? –