【问题标题】:Uniqueness validator returns undefined method `new_record?'唯一性验证器返回未定义的方法 `new_record?'
【发布时间】:2017-08-03 13:00:11
【问题描述】:

我的表单对象在验证用户名的唯一性时遇到问题,然后我搜索了有关如何在表单对象中使用唯一性验证的答案,然后我在这个问题中找到了答案

on an ActiveModel Object, how do I check uniqueness?

但不幸的是,在我创建了 UniquenessValidator 类之后,它在我的表单视图中返回了一个错误,

undefined method `new_record?' for #<UserForm:0x007fd40c42d258>

我如何解决这个错误,我使用的是 Rails 5.1

用户表单(user_form.rb):

class UserForm
  include Virtus.model

  extend ActiveModel::Naming
  include ActiveModel::Conversion
  include ActiveModel::Validations

  attribute :username, String
  attribute :password, String
  attribute :company_name, String

  validates :username, presence: { message: '%{attribute} is required'}
  validates :password, presence: { message: '%{attribute} is required'}
  validates :company_name, presence: { message: '%{attribute} is required'}
  validates :password, length: { minimum: 6, message: '%{attribute} must me
                                             minimum of 6 characters' }
  validates :username, uniqueness: { case_sensitive: false, model: User, attribute: :username }

  def persisted?
    false
  end

  def save
    if valid?
      persist!
      true
    else
      false
    end
  end

  private

  def persist!
    @company = Company.create!(name: company_name)
    @company.users.create!(username: username, password: password,
                           user_type: 'Owner')
  end
end

【问题讨论】:

  • 请在此处发布您的代码
  • 我猜你没有模型
  • @MayurShah 我更新了我的帖子,我的表单对象的代码已包含在内
  • @Fallenhero 我有一个模型看看我的代码
  • 没有。你没有模型。那看起来像class UserForm < ActiveRecord::Base。我不知道你为什么要尝试includes。

标签: ruby-on-rails validation


【解决方案1】:

新记录?方法来自 ActiveRecord::Persistence 模块。我怀疑您是否可以简单地包含它,因为您的模型不是 ActiveRecord::Base 的典型子类。

这是一个快速而肮脏的解决方案,可能会满足您的需求:

validates :username, if: :new_username?

# ...

private

def new_username?
    User.where(username: username).empty?
end

请注意,这只有在您创建新用户时才能正常工作。更新现有用户总是会失败。 (根据您发布的代码,看起来您就是这样使用此模型的。)

【讨论】:

  • 基本上有一个更新,所以我需要验证器来创建和更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 2016-09-26
  • 2011-11-04
相关资源
最近更新 更多