【问题标题】:How can I know which columns in my table are considered unique?我如何知道我的表中的哪些列被认为是唯一的?
【发布时间】:2014-01-05 03:16:22
【问题描述】:

我的表中有两列是唯一的:用户名和电子邮件。我正在尝试创建一种方法,该方法将自动检查用户输入的内容是否唯一。有点像

def check_if_taken(arg = {})
  params.each do |key, value|
    if (key is a unique column???)
      return true if User.where(key => value).present?
    end
  end
  false
end

如何找出表中的唯一列?

编辑:重构

  def self.is_taken?(params = {})
    params.detect do |key, value|
      User.where(key => value).present?
    end
  end

【问题讨论】:

  • 你不能为此使用验证吗?
  • 你说的验证是什么意思?我们在用户模型中有验证约束。在 JS/前端,我使用 parsleyjs 来验证表单。用户输入“用户名”字段,如果用户名已经存在,我们检查 db。用户在电子邮件字段中输入,如果电子邮件已经存在,我们会检查 db。
  • 您可以使用exists? 方法。例如:Model.exists(key: value)

标签: ruby-on-rails ruby-on-rails-3 rails-activerecord


【解决方案1】:

你可以试试:

class ActiveRecord::Base 
  def self.unique_attribute?(attribute_name)
    !!_validators[attribute_name] && !!_validators[attribute_name].find {|v| v.is_a? ActiveRecord::Validations::UniquenessValidator)
  end
end

然后:

YourModel.unique_attribute?(attribute_to_check)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    相关资源
    最近更新 更多