Max*_*Max 1 ruby ruby-on-rails devise ruby-on-rails-3
我正在尝试在创建时向我的用户添加用户名.
在设计/注册/新我有:
<h2>Sign up</h2>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<p><%= f.label :username %><br />
<%= f.text_field :username %></p>
<p><%= f.label :email %><br />
<%= f.email_field :email %></p>
<p><%= f.label :password %><br />
<%= f.password_field :password %></p>
<p><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %></p>
<p><%= f.submit "Sign up" %></p>
<% end %>
<%= render :partial => "devise/shared/links" %>
Run Code Online (Sandbox Code Playgroud)
问题是没有params[:username]发送到控制器,我在视图中收到以下错误:
ActiveRecord::StatementInvalid in Devise::RegistrationsController#create
Mysql::Error: Column 'username' cannot be null:
INSERT INTO `users` (`email`, `encrypted_password`, `reset_password_token`,
`reset_password_sent_at`, `remember_created_at`, `sign_in_count`,
`current_sign_in_at`, `last_sign_in_at`, `current_sign_in_ip`, `last_sign_in_ip`,
`created_at`, `updated_at`, `username`) VALUES ('mail@test.dk',
'$2a$10$bWjAXLY8QGXrXeVrGciv2O6mjRF940lajBEsUOPPtPDhKyj0A/gia', NULL, NULL,
NULL, 0, NULL, NULL, NULL, NULL, '2011-05-15 16:16:36', '2011-05-15 16:16:36',
NULL)
Rails.root: C:/Rails/densjove
Application Trace | Framework Trace | Full Trace
Request
Parameters:
{"utf8"=>"?",
"authenticity_token"=>"qkQ8L0ZonXYxWQ2f4cfdREZ222oa2zGUb/qll3TRxjQ=",
"user"=>{"username"=>"hansen",
"email"=>"mail@test.dk",
"password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]"},
"commit"=>"Sign up"}
Run Code Online (Sandbox Code Playgroud)
我已将usernamecoloumn 添加到我的模型中,但是如何访问params[:username]我的控制器?
Wil*_*rim 13
Rails 4将param sanitizing移动到控制器.
为设计添加自定义字段的一种方法是在Application Controller中添加一个before过滤器,调用一个方法来定义哪些是允许的参数.
在代码来自https://github.com/plataformatec/devise#strong-parameters
class ApplicationController < ActionController::Base
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :username
end
end
Run Code Online (Sandbox Code Playgroud)
上面的代码是您添加名为username的字段.如果你要添加first_name,它将是:
devise_parameter_sanitizer.for(:sign_up) << :first_name
Run Code Online (Sandbox Code Playgroud)
这是一种方式,我强烈考虑阅读上面链接中的文档,以便了解更多关于自定义设计允许某些字段的信息.