使用Mongoid with Rails限制嵌入文档数量的正确方法是什么。
我试过这个:
class League
include Mongoid::Document
embeds_many :teams
validate :validate_teams
def validate_teams
if teams.size > 6
errors.add(:base, "too many teams")
end
if !errors.empty?
raise Mongoid::Errors::Validations.new(self)
end
end
end
但这会破坏它:
# Get a league with 5 teams.
league = League.first
# Get a copy of the league.
copy = League.first
# Create a new team for the first instance of the league and save.
league.teams.build
league.save
# Create a new team for the second instance and save.
copy.teams.build
copy.save
league.reload.teams.size # => 7
在生产中,Rails应用程序的多个实例同时运行并响应请求,这种情况就会变得明显。我需要一种坚如磐石的方法来限制嵌入文档的数量。这样做的正确方法是什么?
答案 0 :(得分:1)
我最终通过使用乐观锁来解决这个问题。没有其他方法可以明确限制嵌入文档的数量。
我实现了自己的乐观锁定版本,但这里有一个宝石可能很有用:https://github.com/burgalon/mongoid_optimistic_locking