覆盖活动记录属性方法

时间:2018-09-08 18:04:11

标签: ruby-on-rails ruby activerecord

我想覆盖默认的活动记录attributes方法,因为我不想在任何模型的json响应中返回created_atupdated_at

这就是我所做的。

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true

  def attributes
    super.except('created_at', 'updated_at')
  end
end

在过去的几个月里,这对我来说还不错。但是现在我遇到了一种情况,我不应该从我的password模型发送User属性。所以

class User < ApplicationRecord
  def attributes
    super.except('password')
  end
end

当我从Rails控制台运行它时,它就像一种魅力。但是,当我从控制器运行它时,我真的不知道是什么原因,但是它会无限循环。这是我的控制器动作。

def update
  @object = klass.find(id)
  @object.update_attributes!(update_params)
  render json: {
    status: true,
    message: 'Saved Successfully..!',
    data: object_json(@object)
  }
end

def object_json(object)
  object.as_json.except('updated_at', 'created_at')
end

有人可以帮我吗

1 个答案:

答案 0 :(得分:2)

控制想要在JSON响应中呈现哪些属性的更好方法是使用序列化器,例如active_model_serializers

可以在这里SERVING CUSTOM JSON

找到一篇很好的文章来阅读

我不建议覆盖默认的活动记录attributes方法