非常具体的ActiveRecord验证

时间:2015-05-28 02:51:59

标签: ruby-on-rails ruby-on-rails-3 activerecord rails-models

我会尽力解释我的困境。

我有2个型号 用户设备

设备有一个类型列。例如,它可以是平板电脑或智能手机。

然后我有另一个模型所有权

此模型属于用户和设备,因此表中的条目会将用户与表示该用户拥有该设备的设备匹配。

我需要在主要开始的所有权模型上设置一些验证。

  • 没有设备可以拥有多个所有权条目(简单,因为验证device_id列是唯一的)
  • 对于每种可用设备,用户只能拥有一台设备的所有权。

那么我将如何对最后一部分进行验证呢?我无法将client_id表设置为唯一,因为它们将为不同类型的设备提供多个条目。但我希望他们每种类型的设备只有一行。

我希望这是有道理的。如果您需要更多详细信息,请与我们联系。我很感激任何见解!

谢谢!

1 个答案:

答案 0 :(得分:1)

validates :device_id, uniqueness: true
validate :device_type_unique?

def device_type_unique?
  if Ownership.includes(:device).where('devices.type = ? AND ownerships.user_id = ?', self.device.type, self.user_id)
    errors.add(:user_id, "Can only own one device type.")
  end
end