我有一个 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/