2010-01-28 22 views
5

Merhaba, modelinde bir has_and_belongs_to_many kullanıyorum. Çeşitlerin varlığını kontrol etmesini istiyorum. ve 3has_and_belongs_to_many öğesinin varlığını doğrulayın

class Core < ActiveRecord::Base 
    has_and_belongs_to_many :kinds, :foreign_key => 'core_id', :association_foreign_key => 'kind_id' 
end 

çekirdek başına türlü maksimum sayıda i kadar yapabilir ayarlamak?

sayesinde

cevap

6
validate :require_at_least_one_kind 
validate :limit_to_three_kinds 

private 

def require_at_least_one_kind 
    if kinds.count == 0 
    errors.add_to_base "Please select at least one kind" 
    end 
end 

def limit_to_three_kinds 
    if kinds.count > 3 
    errors.add_to_base "No more than 3 kinds, please" 
    end 
end 
2

Sen (Ruby on 2.3.4 test) böyle bir şey deneyebilirsiniz:

class Core < ActiveRecord::Base 
    has_and_belongs_to_many :kinds, :foreign_key => 'core_id', :association_foreign_key => 'kind_id' 
    validate :maximum_three_kinds 
    validate :minimum_one_kind 

    def minimum_one_kind 
    errors.add(:kinds, "must total at least one") if (kinds.length < 1) 
    end 

    def maximum_three_kinds 
    errors.add(:kinds, "must not total more than three") if (kinds.length > 3) 
    end 
end 

... şu şekilde çalışır: Açıkçası

require 'test_helper' 

class CoreTest < ActiveSupport::TestCase 

    test "a Core may have kinds" do 
    core = Core.new 
    3.times { core.kinds << Kind.new } 

    assert(core.save) 
    end 

    test "a Core may have no more than 3 kinds" do 
    core = Core.new 
    4.times { core.kinds << Kind.new } 
    core.save 

    assert_equal(1, core.errors.length) 
    assert_not_nil(core.errors['kinds']) 
    end 

    test "a Core must have at least one kind" do 
    core = Core.new 
    core.save 

    assert_equal(1, core.errors.length) 
    assert_not_nil(core.errors['kinds']) 
    end 
end 

Yukarıda özellikle KURU ya da üretime hazır değil, ama fikri anlıyorsunuz.

+1

Doğrulama yönteminin 2.0.3'te kullanımdan kaldırıldığı, ancak neyin lehinde olduğu söylenmez. Herkes açıklayabilir mi? – tadman

İlgili konular