Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.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 菜单部分生成代码属于哪里_Ruby On Rails_Model View Controller - Fatal编程技术网

Ruby on rails 菜单部分生成代码属于哪里

Ruby on rails 菜单部分生成代码属于哪里,ruby-on-rails,model-view-controller,Ruby On Rails,Model View Controller,在我的application.html.erb布局中,我正在呈现包含以下代码的部分共享/_menu.html.erb <nav> <ul> <% Post.all.each do |post| %> <%= link_to post.title, post.permalink %> <% end %> </ul> </nav> 事实上,从我的角度来看,我对模型进行了一

在我的application.html.erb布局中,我正在呈现包含以下代码的部分共享/_menu.html.erb

<nav>
  <ul>
    <% Post.all.each do |post| %>
      <%= link_to post.title, post.permalink %>
    <% end %>
  </ul>
</nav>


事实上,从我的角度来看,我对模型进行了一次调用,从尊重MVC的角度来看,这似乎有点问题。是否有人建议我如何解决此问题?

添加到应用程序控制器的\u filter
之前:

before_filter :define_posts

def define_posts
  @posts = Post.all
end
helper_mathod :posts

def posts
  @posts ||= Post.all
end
那么您的菜单应该如下所示:

<nav>
  <ul>
    <% @posts.each do |post| %>
      <%= link_to post.title, post.permalink %>
    <% end %>
  </ul>
</nav>
因此,您可以直接从菜单中调用它:

<nav>
  <ul>
    <% posts.each do |post| %>
      <%= link_to post.title, post.permalink %>
    <% end %>
  </ul>
</nav>

第二种方法看起来没那么干净

现在的一个解决方案是使用:

可能重复的