2011-07-17 39 views
3

Rails的3.1.RC4
設計1.4.2

我添加FIRST_NAME和LAST_NAME列設計的用戶表。 然後我用控制檯爲我的第一個用戶添加first_name和last_name。設計:添加FIRST_NAME給用戶

現在,我的application.html.erb顯示我的名字和姓氏感謝下面的代碼我已確認後,用戶登錄:

<%= current_user.first_name %> <%= current_user.last_name %>(<%= current_user.email %>) 

這裏是我的問題:當我嘗試註冊一個新的用戶通過我創建的新用戶表單,first_name和last_name不存儲在數據庫或其他內容中...因爲當我使用新用戶登錄時,我在application.html.erb上的代碼不顯示姓氏和名字。

這裏的第一個和最後一個名稱的文本字段中new.html.erb

<p><%= f.label :first_name %><br /> 
    <%= f.text_field :first_name %></p> 

<p><%= f.label :last_name %><br /> 
    <%= f.text_field :last_name %></p> 

<p><%= f.label :email %><br /> 
    <%= f.email_field :email %></p> 

我也想知道如何添加驗證了我創建這些新的列(如first_name和last_name) 。

在此先感謝!

回答

9

默認情況下,devise會保護所有屬性。對於要能夠大規模分配(例如,通過一種形式)的任何屬性,你需要明確允許它在你的模型:

attr_accessible :first_name, :last_name 

它的工作在你的控制檯,因爲你可能做這樣的事情:

@user = User.first 
@user.first_name = "foo" 
@user.save 

但是這不會工作,如果該屬性是不可訪問:

@user = User.new(:first_name => "foo") 
@user.save 

你會看到一個警告「無法大規模分配保護屬性」,在你的日誌文件。

如需驗證,請查看Rails docsthis guide。例如,要確保提供全名,請將

validates_presence_of :first_name, :last_name 

添加到您的模型中。

+0

我想我不得不使用不同的語法爲色器件列的字段名稱:(感謝的人 – imjp

0

我想,你忘了爲你的新屬性設置attr_accessible

0

添加以下到您的應用程序控制器

protected 

    def configure_permitted_parameters 
     devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:first_name, :last_name, :profile_name, :email, :password, :password_confirmation) } 
     devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :profile_name, :email, :password, :password_confirmation) } 


    end 
0

我已經解決了這個問題。它也將用於導軌4。

步驟1:首先

$軌道生成遷移AddFieldToUsers如first_name:字符串姓氏:串

$耙分貝:遷移

步驟2: 添加這些代碼上的色器件查看

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

第3步:添加到您的應用程序控制器

before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name,:last_name,:email, :password) } 
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name,:last_name,:email, :password) } 
    end