Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails Navbar应用程序控制器变量_Ruby On Rails - Fatal编程技术网

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 ??? 你什么也没做。你的回答毫无帮助。下次发表评论时,不要回答。你可以从他的回答中看出一个人应该是什么样子。我使用的是应用程序控制器,但方式不对。这是两个不同的人要求你做的,但是你告诉他们他们都错了,并问第二个为什么费心重复这些信息。因此我觉得很有趣。