2011-07-21 12 views
5

Rails 3.1アプリケーションでは、Deviseのuser_logged_in?というメソッドがあります。これは部分的にレンダリングするために使いたいものです。レイアウト/ application.html.erbのコードは次のとおりです。Rails 3、ユーザーがログインしている場合にのみ部分的レンダリング

<% if user_logged_in? %> 
<%= render :partial => "home/statusbar" %> 
<% end %> 

これは別のコントローラの一部を使用しています。これは部分的である:current_usernilあるため

<div id="status_bar"> 
    Signed in as <%= link_to current_user.name, edit_user_registration_path %> 
</div> 

エラーは、current_user.name(不定法)で起こります。私はuser_logged_in?チェックを部分的に動かすことができましたが、それがビューにあれば、それはわずかに効率的だと思います。

私にベストプラクティスが何であるか、または未定義のメソッドエラーをどのように克服できるか教えてください。 ifブロック内にあるのにRailsがテンプレートのコードをチェックするのは正常ですか?

答えて

13

user_logged_in?は何かが間違っている場所です。これに変更すると機能しますか?

<% if current_user.present? %> 
    <%= render :partial => "home/statusbar" %> 
<% end %> 
+3

はい、あります。私はuser_signed_in?を使用すると動作します。完全に間違った方法。ごめんなさい、ありがとう! – joseph

1

このコードは、実行、ルビーはアヒルがタイプさとダイナミックされている、すべてのチェックは実行時です。だから、あなたの条件を確認する必要があります。試してみると失敗するかどうか確認してください。

<% if false %> 
    <%= render :partial => "home/statusbar" %> 
<% end %> 

bettter解決策は、私が工夫に不慣れだ

<% if current_user %> 
    <%= render :partial => "home/statusbar" %> 
<% end %> 

だろうが、誰もが

+0

あなたが正しいです、私はuser_logged_inではなく、user_signed_inを使用するはずでした!有益な答えをありがとう。 – joseph

4

にログインしていない場合は、現在のユーザーは、私が考案精通んだけど、ないuser_logged_in?方法nilにウィルので、これは を動作するはずです - あなたはそれを自分で定義しましたか?ビューで使用される通常のヘルパーはuser_signed_in?です。 (user_signed_in?falseを返すべきである)

<% puts user_logged_in?.inspect %> 
<% puts user_signed_in?.inspect %> 

あなたのビューのif文の上に、そしてあなたの呼び出しが正しくfalseを返していることを確認するためにログをチェックしてください。また、次のようなものを試してみてください。実際にレンダリングされていない限り(つまり、コードがif文を入力したことを意味します)、部分的にエラーが発生してはなりません。

0

条件

<%= render(partial: "home/statusbar") if current_user.present? %> 
1

であなたの部分をレンダリングするより短い方法は、私は

user_logged_in? 

はもう使用されず、代わりにあなたが使用する必要があることが表示されます、解決策を見つけあり

user_signed_in? 

あなたが指定したコードでは、次のようになります。

<% if user_signed_in? %> 
    <%= render :partial => "home/statusbar" %> 
<% end %> 

このコードは私にとっては部分的なものでした。

関連する問題