我有一个属于用户和客户的令牌模型,但也有一个房间。
所以我想做的是检查用户的唯一性,范围是房间ID。
我还想检查客户的唯一性,房间ID范围。
问题是如果为客户制作令牌,则user_id将为零。如果它属于用户,则客户将为零。
那么如何检查令牌是属于用户还是客户。考虑到几个将为零,这可能会导致错误,因为这将违背我认为的验证。
答案 0 :(得分:0)
这样的东西?:
validates_uniqueness_of :user_id, :scope=>:room_id, :allow_nil=>true
validates_uniqueness_of :customer_id, :scope=>:room_id, :allow_nil=>true
validates_presence_of :user_id,:if=>Proc.new { |x| x.customer_id.nil? }
答案 1 :(得分:0)
我可以在这里建议,你应该使用多态关联而不是使用两个(user_id和customer_id)不同的列。您可以使用以下网址:
http://guides.rubyonrails.org/association_basics.html#polymorphic-associations
并且您的唯一性必须是,房间ID和polymorphic_type列的范围。
class Room < ActiveRecord::Base
belongs_to :accountable, polymorphic: true
end
class Customer < ActiveRecord::Base
has_many :pictures, as: :accountable
end
class User < ActiveRecord::Base
has_many :pictures, as: :accountable
end
然后你需要在房间表中创建两个(accountable_id和accountable_type)列。此外,唯一性范围也是基于问责类型的