这是我的 People Controller 中用于创建操作的代码:
def create
@person = Person.new(person_params)
@person.branch_id = session[:branch_id]
@person.added_by = current_user.id
if @person.save
respond_to do |format|
format.json { render json: @person}
end
end
end
我的人物模型中有一个方法来获取此人的全名:
def full_name
[self.first_name, self.middle_name, self.last_name].reject(&:blank?).join(" ")
end
当它作为 JSON 对象返回时,将人员的全名添加到 @person 的最佳方法是什么
最佳答案
正如您希望它在 JSON 中一样,您可以覆盖 Person
类的 as_json
方法以包含添加 full_name的选项
方法:
def as_json(options = {})
super options.merge(methods: [:full_name])
end
Rails 会在需要将对象序列化为 JSON 字符串时使用此方法,例如通过 render json: @person
。如果你只想在这一次添加额外的方法,你也可以使用 render json: @person.as_json(methods: [:full_name])
直接内联调用它,或者如果你想做更多对 JSON 输出的复杂自定义,您可以考虑使用专用的序列化程序类,例如使用 ActiveModel::Serializers gem 。但是,由于您只想添加一种方法,而且可能在任何地方都需要序列化 @person
,因此针对您的情况,最好的方法是只覆盖 as_json
,如开始。
关于ruby-on-rails - Rails - 使用 JSON 从 Controller 返回带有对象的附加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27649836/