【问题标题】:Can't make 'username' attr accessible in User model (Rails 4 - Devise)无法在用户模型中访问“用户名”属性(Rails 4 - 设计)
【发布时间】:2014-01-17 04:04:06
【问题描述】:

在通过 Devise 创建用户模型后,我决定为用户名添加一列。我意识到我需要使其可访问,以便在用户提交新用户表单时数据库能够正确更新。然后我意识到,由于这是 Rails 4,我必须通过控制器来做到这一点,而 Devise 并没有为我的 User 模型提供控制器。所以我按照设计页面上的说明创建了自己的自定义控制器并更改了使用它的路线。这是我的自定义控制器,我把它放在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

然后我修改了routes.db

devise_for :users, :controllers =&gt; { :registrations =&gt; "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 &lt;%= current_user.username %&gt;

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

有人知道我做错了什么吗?哪里错了??我的 Post 模型遇到了类似的问题,某些内容没有更新,但我能够通过更改 PostController 中可访问的属性来修复它。感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 修复了它!非常感谢!我什至从未想过查看 Git 上的默认设计文件。这可能不仅会帮助我解决这个问题,还会帮助我解决未来的问题。再次感谢!
    猜你喜欢
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多