验证可以属于其中一个或另一个的模型

时间:2015-10-01 13:06:21

标签: ruby-on-rails

我有一个属于用户和客户的令牌模型,但也有一个房间。

所以我想做的是检查用户的唯一性,范围是房间ID。

我还想检查客户的唯一性,房间ID范围。

问题是如果为客户制作令牌,则user_id将为零。如果它属于用户,则客户将为零。

那么如何检查令牌是属于用户还是客户。考虑到几个将为零,这可能会导致错误,因为这将违背我认为的验证。

2 个答案:

答案 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)列。此外,唯一性范围也是基于问责类型的