ruby-on-rails - Rails - 使用 JSON 从 Controller 返回带有对象的附加属性

标签 ruby-on-rails model controller attributes

这是我的 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/

相关文章:

ruby-on-rails - 传递给 before_filter 方法调用的参数?

ios - 如何纠正在 "self' 调用或赋值给 'self.init' 之前使用 'self' 的错误?

ios - 无法在 Xcode 中包含 Controller ?

ruby-on-rails - 如何实现在线白板设施?

ruby-on-rails - heroku错误PG::错误:错误:函数strftime(未知,没有时区的时间戳)不存在

ruby-on-rails - Rails,按相关模型计数排序

ios - 从继承类 -ios 实现方法时遇到问题

ruby-on-rails - rails 应用程序 : Method in model or controller

angularjs - 在Angular中,如何从 Controller 内部找到 "called" Controller 的路由?

error-handling - 动态设置错误 Action 的布局文件