如何验证关联模型?

Pam*_*ero 2 ruby-on-rails

这是我第一次构建自定义验证,因为尝试常规 ORM 验证不起作用。我有一个名为 AdGroup 的模型,它属于另一个名为 Car 的模型。我想阻止用户在未选择汽车的情况下创建新的广告组。汽车也是一个文件。

class AdGroup < ActiveRecord::Base
  belongs_to :car
  validate :validate_car_id

  def validate_car_id
    car = Car.find_by(id: params[:id])
    if car.nil?
      errors.add(:car, "Select a car image")
    end
  end
end

class Car < ActiveRecord::Base
  validates :make, :model, :year, presence: true                  
  validates :file, presence: true
  belongs_to :make
  has_many :ad_groups

  ...
end
Run Code Online (Sandbox Code Playgroud)

是我试图选择的图像。

Nic*_*lov 5

您的广告组型号需要与汽车型号相关联。AdGroup 模型应该符合belongs_to :carCar 模型和路线的需要has_many :ad_groups

要验证关联模型,您可以使用 ActiveRecord 的validates_associated. 请务必阅读链接中的文档以了解陷阱。

class AdGroup < ActiveRecord::Base
  belongs_to :car

  validates :car, presence: true
  validates_associated :car
end
Run Code Online (Sandbox Code Playgroud)

使用时validates_associated您不必进行自定义验证。