25

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がトリムに有効であることをどのように確認できますか(またはその逆)?

4

2 に答える 2

63

ここで説明するように、カスタム検証方法を使用できます。

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
于 2012-07-31T09:42:19.833 に答える
28

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
于 2012-07-31T09:44:58.677 に答える