Rails генерирует маршруты из form_with
.Давайте рассмотрим этот случай:
<%= form_with(@article) do |f| %>
...
<% end %>
, когда статья новая и отсутствует в базе данных, Rails определит, что маршрут будет:
articles_path(@article), action: :create
, потому что вы создаете новуюone.
Если статья существует в базе данных, Rails генерирует маршрут обновления:
articles_path(@article), action: :update
Следовательно, массив означает, что путь будет вложенным.Итак, этот код:
<%= form_with([@article, @article.comments.build]) do |f| %>
...
<% end %>
Создает этот маршрут, если комментарий не существует в базе данных:
article_comments_path(@article, @article.comments.build), action: :create
В противном случае маршрут будет:
article_comments_path(@article, @comment), action: :update
Подробнее о разнице между new
и build
: В чем разница между сборкой и новой на Rails?
Подробнее о сравнении form_for
, form_with
и form_tag
https://m.patrikonrails.com/rails-5-1s-form-with-vs-old-form-helpers-3a5f72a8c78a