2013-08-01 2 views
0

Каков правильный метод ограничения количества встроенных документов с использованием Mongoid with Rails.Ограничение количества встроенных документов в Mongoid

Я попытался это:

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 

Этот случай может стать очевидным в производстве с несколькими экземплярами приложения рельсами и отвечать на запросы одновременно , Мне нужен надежный метод для ограничения количества встроенных документов. Каков правильный способ сделать это?

ответ

1

В конечном итоге я решил решить эту проблему, используя оптимистичную блокировку. Нет другого способа окончательно ограничить количество встроенных документов.

я реализовал свою собственную версию оптимистической блокировки, но здесь это драгоценный камень, который может быть полезен: https://github.com/burgalon/mongoid_optimistic_locking

+0

у вас есть суть или репо с вашей версией optimistic_locking? – transGLUKator