2012-05-30 33 views
4

我正在使用構建組合框的JavaScript庫。 我有要求打一個組合框姓名的一個人,所以我的意思是名+姓。我想知道是否有一個快速的方法(而不是手動構建所有的哈希對象)來「模擬」一個額外的字段的存在,我想知道是否有一個快速的方法(而不是手動構建所有的哈希對象)在我的JSON轉換模型中,因爲必須將此對象作爲JSON數組返回,您可以在其中讀取* full_name *作爲鍵。應該包含在JSON序列化中的自定義模型方法

感謝您的幫助

回答

8

你可以通過: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

+0

不錯的回答夥伴,好的例子。給我一秒鐘測試,但我認爲會優雅地工作。 –

+0

如果這是正確的,有助於打勾我的答案。謝謝:) – Chamnap

+0

Obviusly;)你的回答是正確的,但我忘了提及一件事情,如果我想**省略** JSON轉換的一些領域,以避免帶寬消費? –

-1

你可以做的是有一個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將自動訪問上面的方法並執行它,從而更新您實際需要的列。

+0

對不起,這不是我的意思,我需要相反的看法:讀取full_name並將其寫入JSON對象,而不是將我的json對象轉換爲rails模型對象。 –

1

這似乎是這個問題的一個副本:

Rails 3 respond_to json, with custom attributes/methods

具體的:方法哈希:

respond_with({ 
    :cars => @cars.as_json(:only => [:make, :model], :methods => [:full_name]), 
    :vans => @vans 
}) 
+0

我不能合併2答案,但你也有用。 Chamnap更適合我的情況,但您的回答對於您希望在json轉換中包含方法「臨時」(因爲它們作爲選項而不是覆蓋進行傳遞)的情況很有用。 –

相關問題