Rails 4:设计不使用正确的信息填充用户 table

Rails 4: Devise not populating users table with correct information

我有一个安装了 Devise 和 Simple Form 的小型 Rails 4 应用程序。

我的控制器是这样的:

class UserController < ApplicationController
  def create
    User.create(user_params)
  end

  private

    def user_params
      params.require(:user).permit(:first_name, :last_name, :profile_name, :email, :password, :password_confirmation])
    end
  end

我的报名表如下:

<h2>Sign up</h2>

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <div class="field">
    <%= f.label :first_name %><br />
    <%= f.text_field :first_name, autofocus: true %>
  </div>

  <div class="field">
    <%= f.label :last_name %><br />
    <%= f.text_field :last_name, autofocus: true %>
  </div>

  <div class="field">
    <%= f.label :profile_name %><br />
    <%= f.text_field :profile_name, autofocus: true %>
  </div>

  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true %>
  </div>

  <div class="field">
    <%= f.label :password %>
    <% if @validatable %>
    <em>(<%= @minimum_password_length %> characters minimum)</em>
    <% end %><br />
    <%= f.password_field :password, autocomplete: "off" %>
  </div>

  <div class="field">
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation, autocomplete: "off" %>
  </div>

  <div class="actions">
    <%= f.submit "Sign up" %>
  </div>
<% end %>

但是,当我查看 table 中的数据时,它仅显示电子邮件和密码字段。名字和姓氏,以及个人资料名称未存储在记录中。

我是否遗漏了一些阻止在创建新用户时保存所有字段的内容?试图弄清楚我在这里错过了什么!

尝试根据文档更改 ApplicationController(最快的方法):

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :first_name << :last_name << :profile_name
  end
end

根据part of documentation.

检查

希望对您有所帮助!

PS。 1.

如果你想自定义控制器,你应该:

  1. 生成一个(你的看起来像是你自己创建的)。

    rails 生成 devise:controllers [范围]

  2. 自定义生成的控制器:

    class Users::SessionsController < Devise::SessionsController # 你的定制在这里 # # 获取 /resource/sign_in #定义新 # 极好的 # 结尾 ... 结束

检查 this 部分文档。

PS。 2.

在你的代码中有这样一行:

  params.require(:user).permit(:first_name, :last_name, :profile_name, :email, :password, :password_confirmation])

它应该会导致语法错误(如果没有,我会感到很惊讶)。您应该删除列表末尾的 ]

  params.require(:user).permit(:first_name, :last_name, :profile_name, :email, :password, :password_confirmation])