我对Rails很陌生,我很难理解如何做以下工作:
我以为这会很容易..。只需写:
class Rater < ApplicationRecord
validate :unique_position, :on => :create, :on => :edit
private
def unique_position
if Rater.where(name: name, position: position).any?
return false
end
end
end我认为通过返回FALSE,验证将不允许操作继续,但我能够创建重复的操作。我尝试搜索网络和这个网站,使用不同的方法,但不确定我是否使用了不正确的关键字来做我想做的事情。
欣赏任何方向。
发布于 2021-05-07 11:21:38
您需要在errors对象中添加验证错误,而不是在验证失败时简单地返回false。
class Rater < ApplicationRecord
validate :validate_name_and_position_uniqueness, on: [:create, :update]
private
def validate_name_and_position_uniqueness
return true unless Rater.exists?(name: name, position: position)
errors.add :base, 'Name and position already taken.'
end
end发布于 2021-05-07 05:05:05
可以对其他列的作用域中的列使用唯一性验证。这是一个可以帮助你的例子。
validates :name, presence: true, uniqueness: { scope: :position }
或
validates :name, uniqueness: { scope: :position }
*(如果名称字段不是强制性的)。
如果该位置是关联的,则用户将外键与作用域position_id。
例:{ scope: :position_id }.
https://stackoverflow.com/questions/67428846
复制相似问题