gpt4 book ai didi

ruby-on-rails - Rails仅在有条件的情况下验证唯一性

转载 作者:行者123 更新时间:2023-12-03 08:44:43 25 4
gpt4 key购买 nike

我有一个问题类:

class Question < ActiveRecord::Base
attr_accessible :user_id, :created_on

validates_uniqueness_of :created_on, :scope => :user_id
end

一个给定的用户每天只能创建一个问题,因此我想通过唯一索引强制数据库中的唯一性,并通过validates_uniqueness_of强制Question类。

我遇到的麻烦是我只希望非管理员用户使用该约束。因此,管理员每天可以创建任意数量的问题。任何想法如何优雅地做到这一点?

最佳答案

您可以通过将要执行的简单Ruby字符串,Proc或方法名称作为符号作为值传递给验证选项中的:if:unless,从而使验证成为条件。这里有些例子:

在Rails 5.2之前的版本中,您可以传递一个字符串:

# using a string:
validates :name, uniqueness: true, if: 'name.present?'

从5.2开始,不再支持字符串,为您提供以下选项:
# using a Proc:
validates :email, presence: true, if: Proc.new { |user| user.approved? }

# using a Lambda (a type of proc ... and a good replacement for deprecated strings):
validates :email, presence: true, if: -> { name.present? }

# using a symbol to call a method:
validates :address, presence: true, if: :some_complex_condition

def some_complex_condition
true # do your checking and return true or false
end

就您而言,您可以执行以下操作:
class Question < ActiveRecord::Base
attr_accessible :user_id, :created_on

validates_uniqueness_of :created_on, :scope => :user_id, unless: Proc.new { |question| question.user.is_admin? }
end

请查看rails指南中的条件验证部分以获取更多详细信息: http://edgeguides.rubyonrails.org/active_record_validations.html#conditional-validation

关于ruby-on-rails - Rails仅在有条件的情况下验证唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20914899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com