【问题标题】:A Very Specific ActiveRecord Validation一个非常具体的 ActiveRecord 验证
【发布时间】:2015-05-28 02:51:58
【问题描述】:

我会尽力解释我的困境。

我有 2 个模型 用户设备

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

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

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

我需要在 Ownership 模型上设置一些验证,这是主要的。

  • 任何设备都不能有多个所有权条目(就像验证 device_id 列是唯一的一样)
  • 对于每种可用设备,用户只能拥有一个设备的所有权。

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

我希望这是有道理的。如果您需要更多详细信息,请告诉我。如果有任何见解,我将不胜感激!

谢谢!

【问题讨论】:

  • 这听起来像是您想要使用范围选项验证唯一性。 guides.rubyonrails.org/…
  • 这就是我之前看到的。但是该范围选项可以在我的设备表中的列上吗?所以我会有类似 validates :user_id, uniqueness: { scope: :device_type??, message: "Can only own one device type." 之类的东西。 }

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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多