设计中额外列的验证不起作用

时间:2014-01-10 08:03:36

标签: ruby-on-rails devise

在firstName字段中插入一些东西时,显示错误,firstName不应为空白....

任何建议为什么会发生这种情况......?

模型

members.rb文件

class Member < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable



  validates :firstName, :presence => true

end

查看

new.html.erb文件

<h2>Sign up</h2>

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <div><%= f.label :firstName %><br />
  <%= f.email_field :firstName, :autofocus => true %></div>

  <div><%= f.label :email %><br />
  <%= f.email_field :email, :autofocus => true %></div>

  <div><%= f.label :password %><br />
  <%= f.password_field :password %></div>

  <div><%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation %></div>

  <div><%= f.submit "Sign up" %></div>
<% end %>

<%= render "devise/shared/links" %>

3 个答案:

答案 0 :(得分:0)

在Rails 4中,您需要列出您希望表单提交给您的参数。这被称为“强参数”。

Devise有自己的方式可以做到这一点,称为“消毒”。

查看这两个词。

请参阅此答案:https://stackoverflow.com/a/20756469/2308190

答案 1 :(得分:0)

即使你没有输入名字也有可能,但是在params它仍然有空字符串“”的价值?如果您使用以下,它可以工作吗?

validates :firstName, length: { minimum: 2 }

你可以将2变成任何其他数字。

答案 2 :(得分:0)

使用此更新您的设计视图。

<h2>Sign up</h2>

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <div><%= f.label :firstName %><br />
  <%= f.text_field :firstname, :autofocus => true %></div>

  <div><%= f.label :email %><br />
  <%= f.email_field :email%></div>

  <div><%= f.label :password %><br />
  <%= f.password_field :password %></div>

  <div><%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation %></div>

  <div><%= f.submit "Sign up" %></div>
<% end %>

<%= render "devise/shared/links" %>

和模型

validates :firstname, :presence => true