Mic*_*tor 3 attributes controller model ruby-on-rails
这是我的人员控制器中用于创建操作的代码:
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
Run Code Online (Sandbox Code Playgroud)
我在我的人模型中有一个方法来获取人的全名:
def full_name
[self.first_name, self.middle_name, self.last_name].reject(&:blank?).join(" ")
end
Run Code Online (Sandbox Code Playgroud)
当 @person 作为 JSON 对象返回时,将其全名添加到 @person 的最佳方法是什么
由于您希望它在 JSON 中,您可以覆盖类的as_json方法Person以包含添加full_name方法的选项:
def as_json(options = {})
super options.merge(methods: [:full_name])
end
Run Code Online (Sandbox Code Playgroud)
每当对象应该序列化为 JSON 字符串时,Rails 就会使用此方法,例如通过render json: @person. 如果您只想在这种情况下添加额外的方法,您也可以直接使用内联调用它,render json: @person.as_json(methods: [:full_name])或者如果您想对 JSON 输出进行更复杂的自定义,您可以考虑使用专用的序列化器类,例如使用ActiveModel: :序列化宝石。但是,由于您只想添加一个方法并且可能在您正在序列化的任何地方添加@person,因此您的情况的最佳方法是as_json按照开头所述进行覆盖。
| 归档时间: |
|
| 查看次数: |
1681 次 |
| 最近记录: |