3
我有以下mongoid模型,範圍驗證,以防止在一個賬單上的多個選票。每票屬於用戶和組:Mongoid驗證唯一性與範圍和belongs_to
class Vote include Mongoid::Document field :value, :type => Symbol # can be :aye, :nay, :abstain field :type, :type => Symbol # TODO can delete? belongs_to :user belongs_to :polco_group embedded_in :bill validates_uniqueness_of :value, :scope => [:polco_group_id, :user_id, :type] end
用戶有以下方法進行了表決添加到賬單:
def vote_on(bill, value) if my_groups = self.polco_groups # test to make sure the user is a member of a group my_groups.each do |g| # TODO see if already voted bill.votes.create(:value => value, :user_id => self.id, :polco_group_id => g.id, :type => g.type) end else raise "no polco_groups for this user" # #{self.full_name}" end end
和嵌入許多法案類:票。這樣做的目的是允許用戶將他們的投票與不同的團體(「Ruby編碼」,「女性」等)相關聯,並且運行良好,除了數據庫目前允許用戶在一張賬單上多次投票。我如何獲得以下功能?
u = User.last b = Bill.last u.vote_on(b,:nay) u.vote_on(b,:nay) -> should return a validation error
我試過你說的,但得到/Users/Tim/.rvm/gems/[email protected]/gems/activemodel-3.1.0.rc5/lib/active_model/validations/validates.rb :87:在'validates'中:您需要提供至少一個驗證(ArgumentError) – bonhoffer
在閱讀文檔時,我無法找到沒有monkeypatching的自定義驗證器。如果我使用validates_presence_of,那麼驗證器會觸發並正常工作。 – bonhoffer
對不起,有一個錯字,'validates'應該是'validate'。在再次查看文檔定義時,我注意到'Vote'嵌入在'Bill'中,它可能與此有關。如果存在驗證器正確觸發,唯一性也會被解僱。您可以在創建新記錄時發佈在mongodb上觸發的查詢嗎? – rubish