2016-04-28 9 views
-1

私は冷蔵庫を持っており、冷蔵庫に製品を置くことができます。問題はありませんが、2つのルールがあります。Rails 4:属性の一意性の検証には多くの関係があります

  1. 各製品の容量は冷蔵庫に1つのみです。
  2. 私は冷蔵庫に入れることができる一連の製品があります。冷蔵庫の中の最大容量は次のとおりです。

    • 1チーズ
    • 卵1個
    • 1牛乳
    • 1バター
    • 1ピーマン
    • 1レタス

モデルは次のようになります:

定義されたルールを満たすために、冷蔵庫モデルにバリデーターを設定することはできますか?

+1

はい。カスタム検証についてのガイドを読んでください。 http://guides.rubyonrails.org/active_record_validations.html#performing-custom-validations – Meier

答えて

1

あなたはこのような何か行うことができます。

アプリ/バリ/ my_validator.rb

class MyValidator < ActiveModel::Validator 
    def validate(record) 
    types = record.fridge.products.select(:type).map &:type 
    type = record.type 
    if types.include? type 
     record.errors[:name] << 'Only 1 capacity for each product' 
    end 
    end 
end 

を次に、あなたのアプリ/モデル/ product.rbでカスタムバリデータを含める

class Product < ActiveRecord::Base 
    include ActiveModel::Validations 
    validates_with MyValidator 
    belongs_to :fridge 

end 

パスをロードするためにconfig/application.rbにこれを追加することを忘れないでください:

config.autoload_paths += %W["#{config.root}/app/validators/"] 
関連する問題