Подтвердить что ты не робот

Rails 3 - Пользовательская проверка

Я несколько смущен моими вариантами пользовательских проверок в Rails 3, и я надеюсь, что кто-то может указать мне в сторону ресурса, который может помочь в моей текущей проблеме.

В настоящее время у меня есть 3 модели, vehicle, trim и model_year. Они выглядят следующим образом:

class Vehicle < ActiveRecord::Base
  attr_accessible :make_id, :model_id, :trim_id, :model_year_id
  belongs_to :trim
  belongs_to :model_year
end

class ModelYear < ActiveRecord::Base attr_accessible :value has_many :model_year_trims has_many :trims, :through = > :model_year_trims end

class Trim < ActiveRecord::Base attr_accessible :value, :model_id has_many :vehicles has_many :model_year_trims has_many :model_years, :through = > :model_year_trims end

Мой запрос таков: когда я создаю транспортное средство, как я могу гарантировать, что выбранный model_year действителен для обрезки (и наоборот)?

4b9b3361

Ответ 1

вы можете использовать собственный метод проверки, как описано здесь:

class Vehicle < ActiveRecord::Base
  validate :model_year_valid_for_trim

  def model_year_valid_for_trim
    if #some validation code for model year and trim
      errors.add(:model_years, "some error")
    end
  end

end

Ответ 2

Вы можете использовать класс ActiveModel::Validator следующим образом:

class VehicleValidator < ActiveModel::Validator
  def validate(record)
    return true if # custom model_year and trip logic
    record.errors[:base] << # error message
  end
end

class Vehicle < ActiveRecord::Base
  attr_accessible :make_id, :model_id, :trim_id, :model_year_id
  belongs_to :trim
  belongs_to :model_year

  include ActiveModel::Validations
  validates_with VehicleValidator
end