use*_*923 2 ruby ruby-on-rails devise ruby-on-rails-3
所以,我正在为rails应用程序使用设计用户身份验证.我希望为设计用户添加名字和姓氏.因此,我为Users数据库创建了新列.不幸的是,当我尝试我的表单时,我得到"未定义的方法`first_name'".这是表格:
<h2>Sign up</h2>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div><%= f.label :first_name %><br />
<%= f.first_name :first_name, autofocus: true %></div>
<div><%= f.label :last_name %><br />
<%= f.last_name :last_name, autofocus: true %></div>
<div><%= f.label :email %><br />
<%= f.email_field :email, autofocus: true %></div>
<div><%= f.label :password %><br />
<%= f.password_field :password, autocomplete: "off" %></div>
<div><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, autocomplete: "off" %></div>
<div><%= f.submit "Sign up" %></div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我确认使用控制台实际添加了数据库列.我打字了
user = User.new进入控制台并获得以下内容:
"=> #<User id: nil, email: "", encrypted_password: "", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: nil, updated_at: nil, first_name: nil, last_name: nil> "
Run Code Online (Sandbox Code Playgroud)
当我输入user.first_name时,控制台返回nil(这很好,因为没有返回错误,因此列确实已添加到数据库中).到底是怎么回事?什么是可能的修复?
未定义的方法'first_name'
在您的情况下,错误是由于这一行
<%= f.first_name :first_name, autofocus: true %>
Run Code Online (Sandbox Code Playgroud)
这应该是这样的
<%= f.text_field :first_name, autofocus: true %>
Run Code Online (Sandbox Code Playgroud)
还有这一行
<%= f.last_name :last_name, autofocus: true %>
Run Code Online (Sandbox Code Playgroud)
必须更改为相同,以避免另一个错误
<%= f.text_field :last_name, autofocus: true %>
Run Code Online (Sandbox Code Playgroud)
您正在使用attribute names而不是text_field,错误也是如此.
看看这些指南的可用性form_helpers及其用法.这将非常有用.