存在验证

Validation for existence

我想验证我的条目是否存在于数据库中。换句话说,检查输入数据是否存在于 table 中,如果不放手,则停止并显示错误消息,如存在验证等。 据我所知,Rails 4.2 中没有验证:存在或类似的东西。 问题:有简单的方法吗?

如果没有,我可以像这样在我的控制器中手动检查是否存在:

@client = Client.where("name = ?", @request.name).take
if @client.present?
  @request.client_id = @client.id
else    
  # some error message
  render 'new'
end

我认为这应该可行,但如何显示错误消息,而不是闪烁。

您可以使用 uniqueness helper 来验证客户端名称是否唯一

class Client < ActiveRecord::Base
  validates :name, uniqueness: true
end

如果这不能满足您的需求,那么您可以随时创建一个 custom validation 方法并添加错误

  class Client < ActiveRecord::Base
  validate :some_custom_method

  def some_custom_method
    # check for some condition
    # add error messages if that condition fails
  end
end

P.S 如果您使用唯一性助手,请确保在您的数据库中添加唯一性约束。

更新:

您可以像这样添加错误消息:

def some_custom_method
  errors.add(:base, "error message") unless some_condition
end

查看详情working with errors