Ruby on rails Rails Navbar应用程序控制器变量
我在导航栏中使用了一个值。可以将其视为某种低技能通知。在根页面上,我可以访问它,因为我在该方法中定义了它:Ruby on rails Rails Navbar应用程序控制器变量,ruby-on-rails,Ruby On Rails,我在导航栏中使用了一个值。可以将其视为某种低技能通知。在根页面上,我可以访问它,因为我在该方法中定义了它: @conversations = Conversation.where("sender_id = ? OR recipient_id = ?",current_user.id,current_user.id) 如果我转到另一个方法(第页),该变量的作用域将被删除,我必须重新定义它 如何将此变量定义为交叉控制器变量,因为每个页面都有相同的导航栏 <li> Conversatio
@conversations = Conversation.where("sender_id = ? OR recipient_id = ?",current_user.id,current_user.id)
如果我转到另一个方法(第页),该变量的作用域将被删除,我必须重新定义它
如何将此变量定义为交叉控制器变量,因为每个页面都有相同的导航栏
<li> Conversations <%= @conversations.count %> </li>
对话
正如其他人所说,当前用户在应用程序控制器中工作
如果您将会话控制器中的任何代码复制并粘贴到应用程序控制器,则除了从应用程序控制器继承的代码外,您还可以从每个控制器访问它(除非您另有指定,否则所有控制器都可以) 应用程序控制器
....
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>
- 关于
- 对话
导航栏显示计数,无论用户是否登录
<ul>
<li> About </li>
<li>Conversations <%= @conversations.try(:count).to_i %></li>
</ul>
- 关于
- 对话
您需要通过调用yield块将导航栏放置在layouts/application.html.erb和其他内容中,这样您就不会根据控制器更改导航栏(它是固定的)
还要在应用程序控制器的方法中分配变量,以便在其他控制器中访问该变量
如果当前用户无法从应用程序访问,则可能需要重新启动服务器(但通常可以访问)
使用
如果当前用户存在
而不是
如果当前用户存在
问号缺失在
应用程序\u控制器中定义它。rb
我尝试过,但我无法访问设备的当前用户
。您刚才提供了Pavan在评论中建议的答案。正如我所说,我得到一个错误,说“当前用户”没有定义。这是因为帕万所说的事实上是正确的。我想强调一下继承问题,以防这是你的问题。你能把你放在你的应用程序控制器里的确切代码,以及你收到的错误信息公布出来吗?谢谢。我没有一种方法可以做到。它起作用了。将操作前的替换为操作前的,
,否则它会崩溃。你是认真的吗?您不厌其烦地批评建议您使用application controller,然后接受这个答案?lol@Mark ??? 你什么也没做。你的回答毫无帮助。下次发表评论时,不要回答。你可以从他的回答中看出一个人应该是什么样子。我使用的是应用程序控制器,但方式不对。这是两个不同的人要求你做的,但是你告诉他们他们都错了,并问第二个为什么费心重复这些信息。因此我觉得很有趣。