Je suis quelque peu confus par mes options de validations personnalisées dans Rails 3, et j'espère que quelqu'un peut me diriger vers une ressource qui peut aider avec mon problème actuel.
J'ai actuellement 3 modèles, vehicle
, trim
et model_year
. Ils se présentent comme suit:
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
Ma question est la suivante: lorsque je crée un véhicule, comment puis-je m'assurer que le modèle_année sélectionné est valide pour la version (et vice versa)?
vous pouvez utiliser une méthode de validation personnalisée, comme décrit ici :
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
Vous pouvez utiliser le ActiveModel::Validator
classe comme ça:
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