在Rails应用程序的查询中使用模型中定义的默认值

问题描述 投票:1回答:1

我正在使用Rails5。我具有如下定义的产品模型

class Product < ActiveRecord::Base
  validates :image_url, presence: true

  def image_url
    super || 'http://someplaceholderimage.com'
  end
end

每个产品都有一个image_url属性。现在,当我运行以下查询时:

Product.all.where.not(image_url: nil)

我希望它返回所有产品,即使其中任何image_url在数据库中为零。但是没有使用模型中定义的默认值,而是仅获取image_url列在数据库中具有非nil值的那些产品。我该如何解决?

谢谢

ruby-on-rails activerecord ruby-on-rails-5
1个回答
0
投票

这是一个实例方法。它可以在Product类的任何实例上使用。

通过模型对数据库进行的每个查询都是一个类方法。因此,它们将不会按您预期的那样工作。

您可以做的是向数据库中的该列添加默认值。因此,每当插入一条记录时,使用nil(NULL)image_url,它将采用您定义为默认值的值。

© www.soinside.com 2019 - 2024. All rights reserved.