我的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>
有没有办法在页脚中显示类别和帖子而不会反复实例化相同的变量?
答案 0 :(得分:1)
简短的回答是'不'。每个变量必须才能被使用(在这种情况下,在您的视图中),然后才能实例化(初始化)。
现在,有一些更有效的方法来实例化这些变量而不是写作:
@categories = Category.all
@posts = Post.order("created_at DESC")
在多个控制器中。但是,这是一个不同的问题。如果您对此感兴趣,请提出新问题或改进此问题。