在我的application.html.erb布局中,我正在呈现包含以下代码的部分共享/ _menu.html.erb
<nav>
<ul>
<% Post.all.each do |post| %>
<%= link_to post.title, post.permalink %>
<% end %>
</ul>
</nav>
从我的观点来看,我在模型上调用的事实在尊重MVC的意义上似乎是有问题的。有没有人建议如何解决这个问题?
答案 0 :(得分:4)
将before_filter
添加到ApplicationController:
before_filter :define_posts
def define_posts
@posts = Post.all
end
然后你的菜单应该是这样的:
<nav>
<ul>
<% @posts.each do |post| %>
<%= link_to post.title, post.permalink %>
<% end %>
</ul>
</nav>
另一种方法是在ApplicationController中创建辅助方法:
helper_mathod :posts
def posts
@posts ||= Post.all
end
所以你可以直接从菜单中调用它:
<nav>
<ul>
<% posts.each do |post| %>
<%= link_to post.title, post.permalink %>
<% end %>
</ul>
</nav>
第二种方法看起来不那么清洁。
现在的一个解决方案是使用Decent Exposure gem: