应包含在JSON序列化中的自定义模型方法

Fir*_*DoL 5 json model ruby-on-rails ruby-on-rails-3

我正在使用javascript库来构建组合框.我有要求用一个人的全名建立一个组合框,所以我的意思是名字+姓氏.

因为在数据库中这些是2个单独的字段(在我的模型中也是如此),我想知道是否有一种快速方式(而不是手动构建所有哈希对象)来"模拟"我的模型中是否存在其他字段JSON转换,因为此对象必须作为JSON数组返回,您可以在其中读取*full_name*作为键.

感谢帮助

Cha*_*nap 10

您可以通过传递: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
Run Code Online (Sandbox Code Playgroud)

在你的控制器内,你可以简单地

render :json => @person
Run Code Online (Sandbox Code Playgroud)

如果您想了解可以传递给as_json方法的更多选项,请查看此文档. http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html