首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查带有参数的行是否存在,如果存在回滚事务?[RoR 6]

如何检查带有参数的行是否存在,如果存在回滚事务?[RoR 6]
EN

Stack Overflow用户
提问于 2021-05-07 04:02:36
回答 2查看 120关注 0票数 1

我对Rails很陌生,我很难理解如何做以下工作:

  1. a
  2. 用户创建一个具有两个值" name“和”
  3. “的条目。
  4. --我想检查这个名称+位置组合体是否已经存在于db
  5. 中,如果是这样的话,我希望db吐出一个表明名称和位置已经存在的错误。

我以为这会很容易..。只需写:

代码语言:javascript
复制
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,验证将不允许操作继续,但我能够创建重复的操作。我尝试搜索网络和这个网站,使用不同的方法,但不确定我是否使用了不正确的关键字来做我想做的事情。

欣赏任何方向。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-07 11:21:38

您需要在errors对象中添加验证错误,而不是在验证失败时简单地返回false

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2021-05-07 05:05:05

可以对其他列的作用域中的列使用唯一性验证。这是一个可以帮助你的例子。

validates :name, presence: true, uniqueness: { scope: :position }

validates :name, uniqueness: { scope: :position }

*(如果名称字段不是强制性的)。

如果该位置是关联的,则用户将外键与作用域position_id

例:{ scope: :position_id }.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67428846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档