我正在使用javascript库来构建组合框。 我要求用一个人的全名构建一个组合框,所以我的意思是名字+姓氏。
因为在数据库中那些是2个单独的字段(在我的模型中也是如此),我想知道是否有一种快速方式(而不是手动构建所有哈希对象)来“模拟”其他字段的存在我的JSON转换模型,因为此对象必须作为JSON数组返回,您可以在其中读取* full_name *作为键。
感谢您的帮助
答案 0 :(得分:10)
您可以通过传递:methods
选项并调用super
来覆盖模型中的to_json方法。这将使用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
答案 1 :(得分:1)
这似乎是这个问题的重复:
Rails 3 respond_to json, with custom attributes/methods
具体是:方法哈希:
respond_with({
:cars => @cars.as_json(:only => [:make, :model], :methods => [:full_name]),
:vans => @vans
})
答案 2 :(得分:-1)
你可以做的是在你的User类中有一个setter方法,如此
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也会自动访问上面的方法并执行它,从而更新你真正想要的列。