ruby-on-rails - Active Record 未定义方法 read_attribute_for_serialization

标签 ruby-on-rails ruby activerecord

我有一个 Rails 范围,它获取表的第一条记录并将其分配给 @variable。它返回单个对象或空的事件记录关系。我的问题是我正在使用自定义序列化程序来呈现 json,但是如果范围返回一个空的 Active Record 关系,我会得到“Active Record 未定义方法 read_attribute_for_serialization”,除非我使用 each_serializer,但是如果范围返回一个我有的对象使用序列化器渲染它: 有没有办法不这样做就解决这个问题:

if @variable.blank?
  render json: @variable, each_serializer: CustomSerializer
else
  render json: @variable, serializer: CustomSerializer
end

更新

我必须从 Products 表中获取最新记录。 所以我定义了这样一个范围:

scope :last_by_period, -> { order('period desc').first }

因此,如果我的数据库中没有产品记录,此范围将返回一个空的事件记录关系。

最佳答案

either a single object or an empty Active Record Relation

我认为这是问题所在。我认为你应该要么

  • 总是返回一个集合。单个对象的集合或空集合
  • 要么返回单个对象,要么返回 nil

对于第一个选项,您始终可以使用each_serializer。使用第二个选项,您始终可以使用 serializer

关于ruby-on-rails - Active Record 未定义方法 read_attribute_for_serialization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39239310/

相关文章:

ajax - Yii2 ajax 和客户端验证不起作用

ruby-on-rails - 自适应 Paypal

ruby-on-rails - 在 Rails ActiveRecord 查询中有条件地链接 where 子句

ruby-on-rails - 在 Linux 机器上为 Rails 项目安装 Postgres 的技巧

ruby-on-rails - 如何返回空的 ActiveRecord 关系?

ruby-on-rails - 在模型 : how do I include helper dependencies? 中使用助手

ruby-on-rails - Phusion Passanger、Apache 2、mysql 和 Linux

ruby-on-rails - rails : Helper Refactoring

ruby-on-rails - 登录系统的最佳 gem

java - Rails 模型实例变量未在模型类中声明