注册中的NoMethodError #new

时间:2017-12-31 14:47:34

标签: ruby-on-rails

当您尝试注册(/ users / sign_up)时,出现错误。

NoMethodError in Registrations#new
Showing /home/ubuntu/workspace/app/views/devise/registrations/new.html.erb where line #13 raised:
undefined method `user_name' for #<User id: nil, email: "", created_at: nil, updated_at: nil>

我是一门课程的初学者。我的朋友也收到了这个错误。我不知道如何修复它所以这是我的registration_controller代码:

class RegistrationsController < Devise::RegistrationsController

  private

  def sign_up_params
    params.require(:user).permit(:email, :user_name, :password, :password_confirmation)
  end

  def account_update_params
    params.require(:user).permit(:email, :user_name, :password, :password_confirmation, :current_password)
  end
end

以下是设计/注册/ new.html.erb的new.html.erb文件:

<div class="registration-bg">
  <div class="container">
    <div class="row">
      <div class="col-md-4 col-md-offset-4">
        <div class="log-in panel">
          <div class="panel-heading">
            <h2>Create Your Account</h2>
          </div>
          <%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
            <%= f.error_notification %>
            <div class="panel-body">
              <%= f.input :email, required: true, autofocus: true, label: false, placeholder: 'Email', input_html: { class: 'input-lg' } %>
              <%= f.input :user_name, required: true, label: false, placeholder: 'User Name', input_html: { class: 'input-lg' } %>
              <%= f.input :password, required: true, label: false, placeholder: 'Password', input_html: { class: 'input-lg' } %>
              <%= f.input :password_confirmation, required: true, label: false, placeholder: 'Confirm Password', input_html: { class: 'input-lg' } %>
              <%= f.button :submit, "Sign up", class: 'btn-lg btn-info btn-block' %>
            </div>
          <% end %>
        </div>
      </div>
    </div>
  </div>
</div>

1 个答案:

答案 0 :(得分:1)

ActiveModel接受您在模型上定义的字段。 您的user对象看起来像这样

#<User id: nil, email: "", created_at: nil, updated_at: nil>  

您可以运行迁移,控制器不会再次抱怨NoMethodError

rails g migration AddUserNameToUser user_name:string

然后跑,

rails db:migrate