Мы храним наши общие части в библиотеке 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
?)