在ActiveAdmin中的字段上输入验证

时间:2015-08-20 07:02:50

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

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

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

f.input :description

f.input :email

f.input :contact_number

f.input :contact_person

2 个答案:

答案 0 :(得分:4)

[不仅对ActiveAdmin的回答]你应该在模型中做到这一点。如果您的表单未通过模型验证,则会返回有关错误参数的警报(可在flash[:alert]数组中访问)。

例如,如果您希望:contact_number成为数字,则您的模型(例如User)应如下所示:

class User < ActiveRecord::Base

   validates :contact_number, numericality: {only_integer: true}

end

如果说明例如必须至少为5个字符,则为:

validates_length_of :description, minimum: 5

仅限字母:

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

(有关注册表达式的详细信息 - &gt; Validate: Only letters, numbers and -

有关它的更多信息:

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

答案 1 :(得分:1)

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

如果您在模型类中定义了Rails标准验证甚至自定义验证,那么当您尝试创建/编辑/更新该模型的对象时,

ActiveAdmin将会选择它。

例如,对于您的电子邮件验证,您可以在模型中使用此功能:

 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

更新

将这些验证添加到您的Model类:

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