2011-05-15 47 views
1

我想創建用戶名添加到我的用戶。設計如何將addtional字段添加到創建用戶窗體?

在色器件/註冊/新我:

<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" %> 

的問題是沒有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 ('[email protected]', 
    '$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"=>"[email protected]", 
"password"=>"[FILTERED]", 
"password_confirmation"=>"[FILTERED]"}, 
"commit"=>"Sign up"} 

我有將username顏色添加到我的模型中,但是如何在我的控制器中訪問params[:username]

+0

爲什麼不名提交? – Max 2011-05-15 16:37:00

+1

已解決的問題我確實預先將用戶名參數添加到attr_accessible – Max 2011-05-15 16:41:30

+5

您應該添加第二條評論作爲答案,並將其標記爲正確的答案。這樣,未來這個問題的訪問者可以知道這是正確的答案,而不必通過評論。 – theIV 2011-05-15 16:48:57

回答

1

添加用戶名字段在app /模型/ user.rb到attr_accessible

# Setup accessible (or protected) attributes for your model 
attr_accessible :email, :password, :password_confirmation, :remember_me, :username 

從上述評論#1中取出,以便其他人可以很容易地看到解決方案

+4

attr_accessible在rails4上無效。有關如何在那裏完成的任何想法? – 2013-05-26 17:25:00

13

導軌4移動PARAM消毒到控制器。

爲devise添加自定義字段的一種方法是在應用程序控制器中添加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 

上面的代碼,如果要添加字段中指定的用戶名。如果你添加FIRST_NAME這將是:

devise_parameter_sanitizer.for(:sign_up) << :first_name 

這是一種方式,我強烈認爲,以瞭解更多有關自定義設計,以允許某些領域在上面的鏈接閱讀過的文檔。

0

如果您希望在註冊用戶時添加FirstName,LastName或任何列,則必須使用允許的參數配置這些列。

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

    protected 

    def configure_new_column_to_devise_permitted_parameters 
    registration_params = [:first_name, :last_name, :email, :password, :password_confirmation] 
    if params[:action] == 'create' 
     devise_parameter_sanitizer.for(:sign_up) { 
     |u| u.permit(registration_params) 
     } 
    elsif params[:action] == 'update' 
     devise_parameter_sanitizer.for(:account_update) { 
     |u| u.permit(registration_params << :current_password) 
     } 
    end 
    end  
end 

例如:要在用戶註冊等ALTERNATE_EMAIL增加一個列中,只需添加ALTERNATE_EMAIL列registration_params

registration_params = [:如first_name,:姓氏,:電子郵件,:密碼, : password_confirmation,:ALTERNATE_EMAIL]

電子郵件]