2012-04-12 6 views
0

私はdeviseとcancanをレール3.2.1で使用しています。私はリファクタリングと簡略化が可能であることを知っている珍しい問題を抱えていますが、多くの検索の後で、私は立ち往生しています。first_nameとlast_nameを結合して表示するにはどうすればよいですか?

私はFIRST_NAMEとユーザモデルのLAST_NAMEフィールドを持っており、正常にこのコードを使用して、ユーザー/ show.html.erbビューでユーザーのフルネームを表示しています

<%= @user.first_name + " " + @user.last_name %> 

そして私が正常に表示されました使用してヘッダー内のユーザーのショーのページへのリンク:

<% if user_signed_in? %> 
    <li><%= link_to @user.first_name + " " + @user.last_name, current_user %></li> 
<% end %> 

しかし、私はこの1つを把握することはできませんが、アプリの別の部分で作業した後、ヘッダは私に未定義のメソッドエラーメッセージを与え始め...

いずれにしても、ユーザー名を定義して操作する方がはるかに優れていることがわかりました。ユーザーモデルに名前メソッドを追加するなどいくつかのことを試しましたが、この記事からはっきりと分かるように私は初心者であり、その作業を行うことができませんでした。

このようなアプリケーションでユーザー名を最適に扱う方法についてご意見がありましたら教えてください。

+0

編集:users/show.html.erbを参照するとヘッダーが正常に動作しますが、ホームページを参照するとエラーが表示されます –

+0

エラーは何ですか?あなたの質問にそれを追加できますか? – Christian

答えて

3

ここで、@userを定義していますか?私はそれがあなたのUsersControllerのshowアクションにあることを賭けて喜んでいます。つまり、そのアクションのあなたのヘッダーにのみ定義されています。

は、これであなたのヘッダコードを交換してみてください:

<% if user_signed_in? %> 
    <li><%= link_to current_user.first_name + " " + current_user.last_name, current_user %></li> 
<% end %> 

トリックはユーザーが署名されたときに工夫がcurrent_userが常に利用できるようにすることですあなたは@userインスタンス変数を設定することを心配する必要はありません。

+0

ありがとうございます。また、私はちょうどcurrent_user.nameを使用することができるので、リファクタリングする方法はありますか? –

+0

'current_user'はあなたの' User'モデルのインスタンスです。したがって、連結された文字列を返す 'name'という名前のモデルにメソッドを追加するだけです(例:' def name; first_name + '' + last_name;終了 ' –

+1

チェックマークを付けていただきありがとうございます!私はアップボーティングを続けたが、私は15ポイントを得るまでシステムによって阻止された。 –

関連する問題