我有以下设置:
class Round < ActiveRecord::Base
has_many :cards_rounds
has_many :cards, through: :cards_rounds
accepts_nested_attributes_for :cards_rounds
validate :round_validations
private
def round_validations
// pry
unless cards.map(&:id).uniq.size == 3
errors.add(:round, "Must have 3 unique cards")
end
unless cards.map(&:quality).uniq.size == 1
errors.add(:round, "Cards must be of the same rarity")
end
end
end
class CardsRound < ActiveRecord::Base
belongs_to :card
belongs_to :round
end
class Card < ActiveRecord::Base
has_many :cards_rounds
has_many :rounds, through: :cards_rounds
end
Round
始终无法在创建时进行验证。当我介入使用pry时,我可以看到cards
为零,但cards_rounds
已填充,我可以调用cards_rounds[0].card
(例如)。
这是预期的行为吗?我觉得很奇怪,我可以通过cards_rounds引用这些卡片,但不能直接作为一个集合。
Rails版本是4.0.1
答案 0 :(得分:0)
最好的想法是你可以在https://github.com/rails/rails
上打开一个问题答案 1 :(得分:0)
不确定问题出在哪里,我做了以下测试通过的要点:https://gist.github.com/arthurnn/9607180。看到我改变了验证。问题是验证不能依赖于从卡上映射ID,因为它们还没有id。