无法在用户模型中访问'用户名'attr(Rails 4 - Devise)

时间:2014-01-17 04:04:06

标签: ruby-on-rails forms devise ruby-on-rails-4

我决定在通过Devise创建用户模型后为用户名添加一列。我意识到我需要使其可访问,以便在用户提交新用户表单时数据库将正确更新。然后我意识到,由于这是Rails 4,我必须通过控制器来做到这一点,并且Devise不会为我的用户模型提供控制器。所以我按照Devise页面上的说明创建了自己的自定义控制器并更改了使用它的路径。这是我的自定义控制器,我放在apps/controllers/users

class Users::RegistrationsController < Devise::RegistrationsController
  def new 
    super
  end

  def create
    super
  end

  def edit
    super
  end

  private

  def user_params
    params.require(:user).permit(:username, :email, :password, :password_confirmation)
  end
end

然后我用{/ p>修改了routes.db

devise_for :users, :controllers => { :registrations => "users/registrations" }

我的表单如下:

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => {:class => 'form-horizontal'}) do |f| %>
  <%= devise_error_messages! %>

  <div class="control-group">
    <div class="control-label">
      <%= f.label :username %>
    </div>
    <div class="controls">
      <%= f.text_field :username %>
    </div>
  </div>

  <div class="control-group">
    <div class="control-label">
      <%= f.label :email %>
    </div>
    <div class="controls">  
      <%= f.email_field :email, :autofocus => true %>
    </div>
  </div>

  <div class="control-group">
    <div class="control-label">
      <%= f.label :password %>
    </div>
    <div class="controls">
      <%= f.password_field :password %>
    </div>
  </div>

  <div class="control-group">
    <div class="control-label">
      <%= f.label :password_confirmation %>
    </div>
    <div class="controls">
      <%= f.password_field :password_confirmation %>
    </div>
  </div>

  <div class="control-group">
    <div class="controls">
      <%= f.submit "Sign up" %>
    </div>
  </div>

  <div class="control-group">
    <div class="controls">
      Already have an account?  &nbsp;&nbsp;&nbsp; <%= render "devise/shared/links" %>
    </div>
  </div>
<% end %>

我按照设计页面上的说明复制了/devise/registrations' views to / users / registrations。

我没有收到任何错误,但无论出于什么原因,当我测试表单时,它会将所有内容写入数据库,但用户名除外。我可以进入rails控制台并使用用户名创建用户,但表单不会发生这种情况。我的目标是让application.html.erb中的以下代码行工作:

Logged in as <%= current_user.username %>

但它永远不会起作用,失败会反映在控制台中,控制台会将用户名显示为“nil”。

任何人都知道我做错了什么?这个错误在哪里?我的Post模型遇到了类似的问题,某些事情没有更新,但我能够通过更改PostController中可访问的属性来修复它。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

查看registration controller of devise,看起来它没有使用user_params。尝试将user_params更改为sign_up_params