2017-05-17 173 views
1

的獨特性我有以下幾點:Rails的驗證態關聯

class Membership < ApplicationRecord 
    belongs_to :member, polymorphic: true 
    belongs_to :group, polymorphic: true 
end 

正如你可以看到我的會員制模式是雙重的多態。我想驗證:member的唯一性,範圍爲:group

我希望下面將工作:

validates :member, uniqueness: { scope: :group } 

但是,這將導致錯誤:

NameError: uninitialized constant Membership::Member 

是否有這樣做的Rails的方式,或者我需要寫一個自定義的方法爲了它?

+1

我剛剛在Rails 5.0中試過這段代碼,並且收到了相同的錯誤。此外,我嘗試在Rails 5.1和代碼工作正常,沒有錯誤。 –

回答

0
validates :member_id, :uniqueness => { :scope => [:member_type, :group_id,:group_type] } 

有了這個,你可能也想使成員和組都必須存在,因爲零值將導致重複和失敗的唯一性驗證

validates :member_type, :member_id, :presence => true 
validates :group_type, :group_id, :presence => true 
+0

感謝這不會做,因爲就像我說的,我的模型是雙倍多態的。意思是由member_type(可以是用戶,組織,網絡)和member_id標識的每個成員id .....所以我寫了我自己的自定義方法,查看我的答案。無論如何,歡呼聲。 – stephenmurdoch

0

沒有內置爲此,我做了以下操作:

validate :member_is_unique_for_group 

def member_is_unique_for_group 
    if group.members.include? member 
    errors.add(:member, 'already exists for this group') 
    end 
end