2017-04-13 2 views
-1

私はnavbar内で使用する値を持っています。それを何らかの低いスキル通知と考えてください。私はそのメソッドの内部でそれを定義するためのルートページでは、私はそれへのアクセス権を持っている:私は別の方法(ページ)に移動Rails Navbarアプリケーションコントローラ変数

@conversations = Conversation.where("sender_id = ? OR recipient_id = ?",current_user.id,current_user.id) 

場合は、その変数のスコープは外になり、私は再定義する必要があると思いますもう一度。

すべてのページのナビゲーションバーが同じであるため、この変数をコントローラ間変数として定義するにはどうすればよいですか。

<li> Conversations <%= @conversations.count %> </li> 
+0

私が試したapplication_controller.rb' – Pavan

+0

'でそれを定義しますが、私はcurrent_user''へのアクセスを持っていないが欠落している場合デヴァイスの –

答えて

0

ApplicationControllerに

.... 
before_action: :conversation_count 

def conversation_count 
    @conversations = 
     Conversation.where("sender_id = ? OR recipient_id = ?",current_user.id,current_user.id) if current_user.present? 
end 
... 

ナビゲーションバー表示するユーザーが

<ul> 
    <li> About </li> 
    <% if current_user.present %> 
    <li>Conversations <%= @conversations.count %></li> 
    <% end %> 
</ul> 

ナビゲーションバーショーがログインしているにかかわらず、ユーザーのカウントLOGGEDINされている場合にのみ、カウントまたは全く

<ul> 
    <li> About </li> 
    <li>Conversations <%= @conversations.try(:count).to_i %></li> 
</ul> 
+0

ありがとうございます。私は方法でそれを持っていなかった..。それは働いている。 'before_action:'を 'before_action'に置き換えます。そうしないとクラッシュします。 –

+0

あなたは深刻ですか?あなたは、あなたがアプリケーションコントローラを使用することを批判して、この答えを受け入れることを批判するあなたの道から出ましたか?笑 – Mark

+0

@マーク?あなたは何も役に立たなかった。あなたの答えは役に立たなかった。次回はコメントしないでください。あなたは彼の答えからどのように見えるかを見ることができます。私はアプリケーションコントローラを使用していましたが、間違った方法で使用していました。 –

-1

他の人が言ったように、current_userはアプリケーションコントローラで動作します。

会話コントローラーのコードをアプリケーションコントローラーにコピーして貼り付けると、アプリケーションコントローラーから継承するコントローラー以外のすべてのコントローラーからアクセスできます(特に指定しない限りすべてのコントローラーからアクセスできます)。

+0

あなたは、パヴァンがコメントに示唆した答えを提供しました。そして私が言ったように、私は 'current_user'が定義されていないと言っているエラーを取得します。 –

+1

パヴァンが言ったことは事実上正しいからです。それがあなたの問題だった場合の相続問題を強調することを考えました。アプリケーションコントローラに入れている正確なコードと、受け取ったエラーメッセージを投稿できますか? – Mark

0

ナビゲーションバーをlayouts/application.html.erbと他のコンテンツに配置する必要があります。これはyieldブロックを呼び出すことで、コントローラに基づいて実際にナビバーを変更しないようにします(固定)。

また、他のコントローラ全体にアクセスするために、application_controllerのメソッドに変数を割り当てます。

application_controllerからcurrent_userにアクセスできない場合は、サーバーを再起動する必要があります(通常はアクセス可能です)。 current_user.present場合

を使うのか?代わりに

current_user.present

疑問符が

関連する問題