从数组创建json

时间:2012-02-21 19:46:41

标签: ruby-on-rails ruby arrays mapping

我正在将模型查询结果转换为json并使用

将它们发送到选择框
MyModel.find(params[:id]).my_sub_models.map(&:attributes)

我在选择框中显示my_sub_model:name(s)。没关系。

后来我在子模型中添加了一个列(:label),我希望在选择框中显示组合文本,如:name-:label。所以我创建了一个方法

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

如何将每个项目的combine_name现在添加到我的json中?

有什么想法吗?感谢

2 个答案:

答案 0 :(得分: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

<强> 更新

ActiveRecord的

to_json方法在2.3.8之后被弃用。您可能正在使用Rails 3. A similar question was asked sometime back here,这些回复可能会对您有所帮助。特别是关于宝石acts_as_api。做检查。

答案 1 :(得分:0)

你试过收集吗?

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

这样,您只会发送选择框所需的ID和名称。