3

嗨,我是 Rails 新手,有以下 Rails 形式,效果很好。

<%= form_for :user, url: users_path do |f| %>
<p>
<%= f.text_field :email, :placeholder=>'first name' %>
<%= f.text_field :email, :placeholder=>'last name' %>
<%= f.email_field :email, :placeholder=>'email address' %>
<%= f.password_field :password, :placeholder=>'password' %>
<%= f.password_field :password2, :placeholder=>'password2' %>
</p>
<%= f.submit 'Sign up!', :class=>'btn-custom btn-submit' %>
<% end %>

在电子邮件文本框中,内置了一些客户端验证,如果它检测到不是电子邮件地址格式的字符串,则不会提交表单并突出显示该字段。

由于某种原因,内置表单验证不会检查文本字段是否为空。有没有一种方法可以让它检查?

我知道我可以用 jquery 来做到这一点,如果没有其他方法,我会这样做,但拥有 2 种不同形式的验证代码似乎很愚蠢。

仅供参考,我也对我的模型进行了验证。

4

2 回答 2

7

用这个:

<%= f.email_field :email, :required => true, :pattern => '[^@]+@[^@]+\.[a-zA-Z]{2,6}',  :placeholder=>'email address' %>

而且:

你有这些:

<%= f.text_field :email, :placeholder=>'first name' %>
<%= f.text_field :email, :placeholder=>'last name' %>

我想应该是

<%= f.text_field :first_name, :placeholder=>'first name' %>
<%= f.text_field :last_name, :placeholder=>'last name' %>
于 2013-08-14T06:03:54.747 回答
2

为什么你:email在这里的每一条线上都有?

<%= f.text_field  :email, :placeholder=>'first name' %>
                  ^^^^^^ Here
<%= f.text_field  :email, :placeholder=>'last name' %>
                  ^^^^^^^ and here 
<%= f.email_field :email, :placeholder=>'email address' %>

他们不应该被称为:firstnameand:lastname吗?(或模型中调用的任何属性。)

我不确定你在谈论什么样的验证。如果您的意思是客户端验证,即如果存在空白字段,则要阻止表单提交,这必须通过 Javascript 完成。Rails 是服务器端代码,因此在表单数据提交之前无法对其进行任何处理。

要验证字段服务器端,您只需在模型中添加如下内容:

validates :email,     presence: true
validates :firstname, presence: true
validates :lastname,  presence: true

...您说您已经完成了,但我将其包括在内,以供将来可能阅读此问题的任何人参考。

于 2013-08-14T06:05:27.593 回答