Jac*_*ham 111 activerecord ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 rails-activerecord
我有一个Release模型medium和country列(以及其他).不应该releases有相同medium/ country组合的共享.
我如何将其写为rails验证?
tom*_*ave 191
您可以使用选项使用唯一性验证scope.
此外,您应该向数据库添加唯一索引,以防止新记录在写入之前同时检查时传递验证:
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
Run Code Online (Sandbox Code Playgroud)
Aam*_*mir 53
以上所有答案都缺少如何验证模型中多个属性的唯一性.下面的代码旨在告诉如何在范围中使用多个属性.
validates :country, uniqueness: { scope: [:medium, :another_medium] }
Run Code Online (Sandbox Code Playgroud)
它验证country值为medium和的所有行的唯一性another_medium.
注意:不要忘记在上面的列上添加索引,这可以确保快速检索并为唯一记录添加数据库级别验证.
K M*_*lam 32
您可以将:scope参数传递给验证器,如下所示:
validates_uniqueness_of :medium, scope: :country
Run Code Online (Sandbox Code Playgroud)
有关更多示例,请参阅文档.
| 归档时间: |
|
| 查看次数: |
49204 次 |
| 最近记录: |