设计未定义的方法`first_name'

时间:2014-06-18 08:33:12

标签: ruby-on-rails ruby ruby-on-rails-3 devise

所以,我正在为rails应用程序使用devise for User authentification。我希望为设计用户添加名字和姓氏。因此,我为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 %>

我确认使用控制台实际添加了数据库列。我输入了

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> "

当我输入user.first_name时,控制台返回nil(这很好,因为没有返回任何错误,因此列确实已添加到数据库中)。到底是怎么回事?有哪些可能的修复方法?

1 个答案:

答案 0 :(得分:7)

  

未定义的方法&#39; first_name&#39;

在您的情况下,错误是由于此行

<%= f.first_name :first_name, autofocus: true %>

这应该是这样的

<%= f.text_field :first_name, autofocus: true %>

还有这一行

<%= f.last_name :last_name, autofocus: true %>
必须将

更改为相同以避免出现其他错误

<%= f.text_field :last_name, autofocus: true %>

您使用 attribute names 而不是 text_field ,错误也是如此。

请查看这些 Guides ,了解可用的 form_helpers 及其用法。这将非常有用。