2014-06-16 21 views
2

我有一個自定義驗證,可以確保我在HABTM關聯中沒有太多關聯。下面是在Request模型創建新關聯時Rails驗證不運行

validate :max_tags 

    MAXIMUM_AMOUNT_OF_TAGS = 5 

    def max_tags 
    debugger 
    unless tags.count < MAXIMUM_AMOUNT_OF_TAGS 
     errors[:base ] << "You cannot have more than #{MAXIMUM_AMOUNT_OF_TAGS} tags on this gift request." 
    end 
    end 

驗證,這個驗證每當我創建一個新的Request運行;但是,只要我創建tags並將其與Request關聯,它就不會執行。這裏是創造新的協會

當驗證不執行的代碼塊
if @request.save 
    if tags 
    tags.each do |tag| 
     tag = Tag.find_by_name(tag) 
     if tag 
     self.tags << tag 
     tag.increment_gift_request_count 
     end 
    end 
    end 
end 
+0

你說你是使用habtm。在這種情況下,根據文檔,'<<'立即激發SQL更新,所以不會在父對象中運行驗證。 – jvnill

回答

1

您可以驗證號碼標籤與before_add回調,像這樣:

MAXIMUM_AMOUNT_OF_TAGS = 5 
has_and_belongs_to_many :tags, before_add: :validate_max_tags 

private 

def validate_max_tags(tag) 
    if (tags.count > MAXIMUM_AMOUNT_OF_TAGS) 
    errors.add(:base, :max_tag_error) 
    raise ActiveRecord::Rollback 
    end 
end 
+0

我和一個伴侶花了兩天的時間試圖做到這一點。萬分感謝。 – bluehallu