如何避免页脚的相同实例变量

时间:2016-02-27 18:04:22

标签: ruby-on-rails

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

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

welcome_controller.rb(代码提取)

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

_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>

有没有办法在页脚中显示类别和帖子而不会反复实例化相同的变量?

1 个答案:

答案 0 :(得分:1)

简短的回答是'不'。每个变量必须才能被使用(在这种情况下,在您的视图中),然后才能实例化(初始化)。

现在,有一些更有效的方法来实例化这些变量而不是写作:

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

在多个控制器中。但是,这是一个不同的问题。如果您对此感兴趣,请提出新问题或改进此问题。