Рендеринг гетерогенной коллекции: Как я могу указать один каталог для частичных? - PullRequest
2 голосов
/ 10 ноября 2010

У меня есть коллекция @comments, которая неоднородна, но иерархична.Каждый комментарий является экземпляром Comment или некоторым производным классом, таким как ActionComment или InactionComment.Я отрисовываю разные части для каждого типа комментариев.Код представления:

= render @comments

Поскольку все частичные элементы связаны, я хотел бы сохранить их в едином каталоге представления, то есть:

  • app / views / comments / _comment.haml
  • app / views / comments / _action_comment.haml
  • app / views / comments / _inaction_comment.haml

но верноТеперь, чтобы использовать автоматический рендеринг правильной части, я использую отдельные каталоги, такие как:

  • app / views / comments / _comment.haml
  • app / views / action_comments/_action_comment.haml
  • app / views / inaction_comments / _inaction_comment.haml

Ответы [ 2 ]

4 голосов
/ 17 апреля 2012

Rails 3.2 делает доступным метод Model # to_partial_path, который позволяет (как следует из его названия) переопределить частичное имя пути.

  def to_partial_path
    self.action.to_s
  end

Возвращаемый путь не включает начальное подчеркивание и предполагается, чтобыть относительно .../views/modelname/.См. http://blog.plataformatec.com.br/2012/01/my-five-favorite-hidden-features-in-rails-3-2/ для обзора

1 голос
/ 08 марта 2011

Вы не можете сделать это так волшебно, но вы можете сделать это, просто визуализируя каждый элемент по отдельности и указав частичное.

пример в хамле:

- @comments.each do |c|
  = render :partial => "comments/#{c.class.to_s.underscore}", :locals => {:comment => c}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...