Ruby on rails 如何避免页脚使用相同的实例变量

Ruby on rails 如何避免页脚使用相同的实例变量,ruby-on-rails,Ruby On Rails,我的rails应用程序中有一个页脚,显示了welcome_controller.rb中两个实例变量生成的所有最新帖子和类别 但是,如果我转到另一个由不同控制器负责的部分,我会得到一个错误,因为@posts和@categories实例变量不在那里,无法循环并列出最新的帖子和类别 欢迎使用\u controller.rb(代码摘录) _footer.html <div class="row footer-black"> <div class="large-3 columns

我的rails应用程序中有一个页脚,显示了welcome_controller.rb中两个实例变量生成的所有最新帖子和类别

但是,如果我转到另一个由不同控制器负责的部分,我会得到一个错误,因为@posts和@categories实例变量不在那里,无法循环并列出最新的帖子和类别

欢迎使用\u controller.rb(代码摘录)

_footer.html

<div class="row footer-black">
    <div class="large-3 columns text-left">
      <h4>Categories</h4>
      <ul>
        <% @categories.each do |c| %>
          <% unless c.header? %>
            <% if c.restriction %>
              <% if check_for_free_questions_in_restricted_category(c) %>
                <li> <%= link_to c.title, category_random_free_question_path(c),'data-no-turbolink' => true %> </li>
              <% else %>
                <li> <%= link_to c.title, new_subscription_path,'data-no-turbolink' => true %> </li>
              <% end %>
            <% else %>
              <li> <%= link_to c.title, category_random_question_path(c),'data-no-turbolink' => true %> </li>
            <% end %>
          <% end %>
        <% end %>
      </ul>
    </div>
    <div class="large-5 columns text-left">
      <h4>Latest Posts</h4>
      <ul>
        <% @posts.each do |p| %>
          <li> <%= link_to truncate(p.title, length:70), blog_post_path(p) %> </li>
        <% end %>
      </ul>
    </div>
    <div class="large-4 columns text-left social-links">
      <h4>Social</h4>
      <a href="#">
        <i class="fa fa-facebook-square fa-2x"></i>
      </a>
      <a href="#">
        <i class="fa fa-twitter-square fa-2x"></i>
      </a>
      <a href="#">
        <i class="fa fa-google-plus-square fa-2x"></i>
      </a>
    </div>
  </div>

类别
  • 正确%>
  • 正确%>
  • 正确%>
最新帖子
社会的

有没有一种方法可以在页脚中显示类别和帖子,而无需反复实例化相同的变量?

简短的回答是“否”。每个变量在使用之前必须实例化(初始化)(在本例中,在您的视图中)

现在,有一些比编写更有效的方法来实例化这些变量:

@categories = Category.all
@posts = Post.order("created_at DESC")
在多个控制器中。但是,这是一个不同的问题。如果你对此感兴趣,那就提出一个新的问题或改进这个问题

@categories = Category.all
@posts = Post.order("created_at DESC")