【问题标题】:Input validations on fields in ActiveAdminActiveAdmin 中字段的输入验证
【发布时间】:2015-08-20 07:02:49
【问题描述】:

当我在 ActiveAdmin 中创建新表单时,我希望对表单输入字段进行验证。但是我找不到相关的教程。我希望一些字段只接受字母,一些只接受数字,还有一些应该是特定的长度。

f.input :name, :label => "Title", input_html: { autofocus: true }

f.input :description

f.input :email

f.input :contact_number

f.input :contact_person

【问题讨论】:

  • HASEEB AHMAD,你有机会看看我的回答吗?如果您有任何其他问题,请告诉我!

标签: ruby-on-rails ruby-on-rails-4 activeadmin


【解决方案1】:

[回答不仅适用于 ActiveAdmin,而且适用于一般的 RoR]

您应该在 model 中执行此操作。

• 仅适用于数字:

您希望您的:contact_number 是一个数字,因此您的模型(例如User)应该如下所示:

class User < ActiveRecord::Base

   validates :contact_number, numericality: {only_integer: true}

end

• 最小。 5 个字符:

例如,如果描述必须至少为 5 个字符,则为:

validates_length_of :description, minimum: 5

• 仅限字母:

validates_format_of :name, with: /^[-a-z]+$/

(关于 reg. 表达式的详细信息 --> Validate: Only letters, numbers and -

附加信息:

如果您的表单未通过模型验证,它将返回有关错误参数的警报(可在 flash[:alert] 数组中访问)。

更多信息请参见:

http://guides.rubyonrails.org/active_record_basics.html#validations

【讨论】:

  • > 不仅回答 ActiveAdmin。主动管理表单验证的答案在哪里?
【解决方案2】:

您可以在相应的模型类中定义验证。 See the official documentation for Rails validation.

ActiveAdmin 将在您尝试创建/编辑/更新该模型的对象时选择它,如果您有 Rails 标准验证,甚至在您的 Model 类中定义了自定义验证。

例如,对于您的电子邮件验证,您可以在模型中包含以下内容:

 validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create

然后,当您尝试通过 ActiveAdmin 创建/保存对象时,如果电子邮件格式不正确,则会显示错误。

因此,您必须在模型中定义所有验证(针对您想要的所有字段)。就是这样!

而且,要显示所有验证错误的列表,您必须这样做:

form do |f|
  f.semantic_errors *f.object.errors.keys
  # ...
end

更新

将这些验证添加到您的模型类中:

validates_presence_of :description
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i 
validates :contact_number, :presence => {:message => 'hello world, bad operation!'},
                     :numericality => true,
                     :length => { :minimum => 10, :maximum => 15 }

这些是 Rails 标准验证。您也可以向模型添加自定义验证。

例如,如果您想为 username 添加自定义验证,您可以这样定义:

validate :username_must_be_valid

然后,像这样在同一个模型类中定义自定义验证器方法username_must_be_valid

  private

  def username_must_be_valid
    errors.add(:username, 'must be present') if username.blank? && provider.blank?
  end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 2023-03-14
    • 2011-04-25
    • 2013-05-20
    相关资源
    最近更新 更多