在我的Rails應用程序中,我有Card和Pack模型以及它們之間的多對多關係。我想驗證一個包裏面正好有3張卡片。該包使用複選框實現與卡片關聯。has_many關係計數的Rails模型驗證
我的問題:驗證運行時,似乎沒有關聯。驗證失敗,打印輸出爲「卡數爲:0」。爲什麼驗證運行時沒有關聯? (注:同夥是由正確時,確認被刪除,所以代碼工作,只是沒有驗證)
# Pack Model
class Pack < ActiveRecord::Base
has_many :pack_elements
has_many :cards, :through => :pack_elements
validate :validate_number_of_cards
def validate_number_of_cards
puts "cards count is: " + cards.count
errors.add(:cards, "A pack must contain exactly 3 cards.") if (cards.count != 3)
end
end
其他模型就像你所期望的,但沒有驗證。這是Packs表單,它顯示所有卡片,每個卡片旁邊的複選框以及提交按鈕。我想測試這三個盒子是否被選中,我希望測試是在模型中,而不是在表單中。
# packs/_form.html.erb
<%= form_for(@pack) do |f| %>
<div class="field">
<% @cards.each do |card| %>
<%= hidden_field_tag "pack[card_ids][]", nil %>
<%= check_box_tag "pack[card_ids][]", card.id, @pack.card_ids.include?(card.id), id: dom_id(card) %>
<%= label_tag dom_id(card), card.description %>
<hr/>
<% end %>
</div>
<div class="actions">
<%= f.submit %>
</div>
你解決了這個問題嗎?因爲我有一個相似的,並且找不到答案。 –
@MarcinDoliwa我確實解決了它,請參閱下面的答案。 –