Ruby on rails 导致错误的自定义验证

Ruby on rails 导致错误的自定义验证,ruby-on-rails,ruby,customvalidator,Ruby On Rails,Ruby,Customvalidator,我是rails的新手,正在跟踪rails的实用敏捷Web开发中的Depot应用程序,我遇到了一个奇怪的问题 在我的产品模型中,我创建了一个验证器,用于确认图像url字段中请求的图像实际上作为资产存在。这是我的产品型号代码 class Product < ActiveRecord::Base attr_accessible :description, :image_url, :price, :title validates :description, :price, :title,

我是rails的新手,正在跟踪rails的实用敏捷Web开发中的Depot应用程序,我遇到了一个奇怪的问题

在我的产品模型中,我创建了一个验证器,用于确认图像url字段中请求的图像实际上作为资产存在。这是我的产品型号代码

class Product < ActiveRecord::Base
  attr_accessible :description, :image_url, :price, :title
  validates :description, :price, :title, :presence => true
 validate :image_url_exists, on: :create
  def image_url_exists
    if Rails.application.assets.find_asset(image_url) == nil
      errors.add(:image_url, 'is not valid. The image does not exist.')
    end
  end
end

问题是
Rails.application.assets.find_asset(image_url)
image_url
在测试时创建刷新对象时是
nil

p = Product.new # Here p.image_url => nil
您可以通过查看日志找到错误的原因

/var/lib/gems/1.9.1/gems/sprockets-2.2.2/lib/sprockets/base.rb:156:in `initialize'
这里()发生错误的第156行,
path
在这里是
nil

因此,要解决这个问题,您需要在
if
中添加一个条件来检查
image\u url
是否为零,下面是我的建议

if self.image_url.nil? || Rails.application.assets.find_asset(self.image_url).nil?
  errors.add(:image_url, 'is not valid. The image does not exist.')
end

问题是
Rails.application.assets.find_asset(image_url)
image_url
在测试时创建刷新对象时是
nil

p = Product.new # Here p.image_url => nil
您可以通过查看日志找到错误的原因

/var/lib/gems/1.9.1/gems/sprockets-2.2.2/lib/sprockets/base.rb:156:in `initialize'
这里()发生错误的第156行,
path
在这里是
nil

因此,要解决这个问题,您需要在
if
中添加一个条件来检查
image\u url
是否为零,下面是我的建议

if self.image_url.nil? || Rails.application.assets.find_asset(self.image_url).nil?
  errors.add(:image_url, 'is not valid. The image does not exist.')
end

嗯,我不这么认为。我认为
on::create
是有效的ruby语法。如果Rails.application.assets.find\u asset(image\u url.nil)Hmm我不这么认为。我认为
on::create
是有效的ruby语法。如果Rails.application.assets.find\u asset(image\u url).nil?