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
检查
希望对您有所帮助!
PS。 1.
如果你想自定义控制器,你应该:
生成一个(你的看起来像是你自己创建的)。
rails 生成 devise:controllers [范围]
自定义生成的控制器:
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])
我有一个安装了 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
检查
希望对您有所帮助!
PS。 1.
如果你想自定义控制器,你应该:
生成一个(你的看起来像是你自己创建的)。
rails 生成 devise:controllers [范围]
自定义生成的控制器:
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])