我的Release
模型包含medium
和country
列(以及其他)。不应该releases
共享相同的medium
/ country
组合。
我如何将其写为rails验证?
答案 0 :(得分:161)
您可以使用scope
选项进行uniqueness验证。
此外,您应该为数据库添加一个唯一索引,以防止新记录在写入之前同时检查时传递验证:
class AddUniqueIndexToReleases < ActiveRecord::Migration
def change
add_index :releases, [:country, :medium], unique: true
end
end
class Release < ActiveRecord::Base
validates :country, uniqueness: { scope: :medium }
end
答案 1 :(得分:45)
以上所有答案都缺少如何验证模型中多个属性的唯一性。下面的代码旨在告诉您如何在范围中使用多个属性。
validates :country, uniqueness: { scope: [:medium, :another_medium] }
它验证值country
和medium
的所有行中another_medium
的唯一性。
注意:不要忘记在上面的列中添加索引,这可以确保快速检索并为唯一记录添加数据库级别验证。
答案 2 :(得分:29)