Куда относится меню частичной генерации кода - PullRequest
3 голосов
/ 10 апреля 2011

В моем макете application.html.erb я отрисовываю частичный общий / _menu.html.erb, который содержит следующий код

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

Тот факт, что я обращаюсь к Модели с моей точки зрения, кажется мне довольно проблематичным в смысле уважения к MVC. У кого-нибудь есть предложения относительно того, как мне решить эту проблему?

1 Ответ

4 голосов
/ 10 апреля 2011

добавьте 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>

Второй подход выглядит немного чище.

И одним из современных решений является использование Gecent Excenture gem :

http://railscasts.com/episodes/259-decent-exposure

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...