2012-02-21 38 views
1

創建JSON我轉換模型查詢結果以JSON並將它們發送到選擇框從陣列

MyModel.find(params[:id]).my_sub_models.map(&:attributes) 

我顯示my_sub_model:在選擇框中姓名(或名稱)。沒關係。

後來我給子模型添加了一列(:label),我想在選擇框中顯示組合文本,如:name-:label。所以我創建了一個方法

def combined_name 
    self.name + "-" + self.label 
end 

我如何將每個項目的combine_name添加到我的json中?

有什麼想法?謝謝

回答

1

要在模型中包含任何方法,請使用:methods。

my_model.to_json(:methods => :combined_name) 
# => {"id": 1, "name": "My Name", "label": "Label", 
     "created_at": "2012/02/01", "combined_name": "My Name - Label"} 

參考:API Doc

更新:

to_json的ActiveRecord的方法2.3.8之後被廢棄。您可能正在使用Rails 3. A similar question was asked sometime back here和響應可能會幫助你在這裏。特別是關於寶石acts_as_api。做檢查。

+0

謝謝你的迴應。但你的方式沒有爲我工作。它給了我一個沒有我的方法輸出的json數組。 – 2012-02-21 20:16:52

+0

看到我更新的答案。 – 2012-02-21 20:38:46

+0

嗯,我想出了as_json(:methods =>「compound_name」)。但是,謝謝你的參考和小費。接受你的答案。 – 2012-02-21 20:48:01

0

你試過收藏嗎?

MyModel.find(params[:id]).my_sub_models.collect { |sub_model| [ submodel.id, submodel.combined_name ] } 

這樣你將只發送id和名字,你需要爲你的選擇框。

+0

謝謝你的迴應,你的方式正在工作。但它給了我一個陣列。我正在使用** option.name **重新填充選擇框。用你的方式,它會像選項[2]。第一種情況更具可讀性。但是,如果沒有更好的解決方案,我會接受你的答案:) – 2012-02-21 20:15:49

+0

這不是一個問題,你也可以返回一個哈希值。正是我寫這個的方式。你可以做類似的事情:collect {| sub_model | {:id => submodel.id,:name => submodel.combined_name} – 2012-02-21 20:56:35