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 действителен для обрезки (и наоборот)?
Ответы
Ответ 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