2011-07-17 2 views
3

Railsの3.1.RC4
工夫1.4.2

ユーザーへの追加FIRST_NAME。 その後、最初のユーザーにfirst_nameとlast_nameを追加するためにコンソールを使用しました。工夫:私はのユーザーテーブルを考案するFIRST_NAMEとLAST_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

デフォルトでは、すべての属性が保護されます。いずれかのためにあなたが(例えば、フォームを経由して)質量割り当てにできるようにしたい、あなたが明示的にモデルにそれを許可する必要があります属性:

attr_accessible :first_name, :last_name 

あなたは、おそらくこのような何かをしたので、それはあなたのコンソールで働いていた:

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

しかし属性にアクセスできない場合、これは動作しません。

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

あなたは警告がログファイルに「質量割り当ては、属性を保護することはできません」を参照してくださいする必要があります。

確認のためRails docsまたはthis 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を生成する:文字列LAST_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 
関連する問題