-1

Мы храним наши общие части в библиотеке app/views/shared.Организация общих частей

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

app/views/shared/_comment.html.erb:

<tr> 
    <td><%= comment.body %></td> 
    <td><%= link_to 'Edit', edit_comment_path(comment) %></td> 
    <td><%= link_to 'Destroy', comment, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
</tr> 

app/views/posts/show.html.erb:

. 
. 
. 
    <%= link_to 'Show Comments', '#', id: 'show-comments-link' %> 
    <section id="comments-section"> 

    <table id="comments-table"> 
     <tbody> 
     <%= render partial: 'shared/comment', collection: @comments %> 
     </tbody> 
    </table> 

    </section> 

</section> 

Посмотрите, как я m, способный отображать частичное, ссылаясь на его местоположение в app/views/shared lib an d имя как то же, что и имя файла, но без предшествующего _ или заканчивается .html.erb?

Именно эта линия здесь:

<%= render partial: 'shared/comment', collection: @comments %> 

Работа с частичными является отличным примером того, как Rails выбирает convention over configuration. Здесь много соглашений.

Сосредоточение внимания на именах файлов, местах расположения и организации кода (и пропуске rendering collections). Я думаю, что эта цитата из Agile Web Development with Rails 5 очень полезно:

Если первый вариант или :partial параметра к render вызову простого имени, Rails предполагает, что целевой шаблон находится в view каталоге текущего контроллера. Однако, если имя содержит один или несколько символов /, Rails предполагает, что часть до последней косой черты - это имя каталога, а остальное - имя шаблона. Предполагается, что каталог находится под app/views. Это упрощает разделение партитур и поддетей между контроллерами.

Соглашение между Rails-приложениями заключается в том, чтобы хранить эти разделенные частичные файлы в подкаталоге app/views под названием shared.

Теперь мне интересно, как я должен добавить форму для создания нового комментария для размещения в конце comments-section.

  • Должен ли я также поместить его в app/views/shared директорию, имя его _comment_form.html.erb и продолжают ссылаться на него, как 'shared/comment_form'?
  • Должен ли я переместить все в каталог app/views/comments, назовите его _form.html.erb, и укажите его как 'comments/form' (и перейдите в раздел shared dir convention)?
  • Также как насчет нового комментария? Должен ли я создать @new_comment = Comment.new внутри действия Posts#show?
  • Каковы некоторые общие рекомендации, которые вы применяете, чтобы принимать решения о том, как организовать ваши разделяемые части? (может быть, он должен пойти в shared/comments/_form.html.erb?)

ответ

1

Во-первых, нет окончательного руководство к этому. Все это основано на предпочтении управления файлами.

Однако, сохраняя 'comments/form' ваши формы ресурсов (POST всевозможных/PUT действий, связанные с) в пределах обзора пространства имен, что ресурсы имеет больше смысла, чем сбрасывать его в views/shared как он может получить очень грязно, когда все обертоны с похожими названиями из разные ресурсы перепутаны. Я бы порекомендовал namespaced views/shared/comments, чтобы сохранить фрагменты для шаблонов цикла, таких как shared/comments/comments_on_homepage, shared/comments/comments_for_admin и т. Д.

-1

это может может помочь вам:

= оказывают частичное: "общий/комментарий", коллекция: @comments, как:: комментарий

Смежные вопросы