form_with model: ...
и form_for ...
оба принимают ресурсно-ориентированный стиль .
Ваш пример:
[@article, @article.comments.build]
Будет переведено (при условии, что статья с идентификатором 1):
POST /articles/1/comments
Передача массива в качестве ресурса потребует вложенного ресурса или ресурса с пространством имен. Последний элемент в массиве должен быть ресурсом для работы. Если этот последний элемент является новой записью, форма будет использовать POST
, если это существующий ресурс, будет использоваться PUT
.
Вот несколько примеров, чтобы прояснить ситуацию:
[@existing_article]
# PUT /articles/1
[@new_article]
# POST /articles
[@article, @existing_comment]
# PUT /articles/1/comments/1
[@article, @new_comment]
# POST /articles/1/comments
[:admin, @existing_article]
# PUT /admin/articles/1
[:admin, @new_article]
# POST /admin/articles
[@article, :admin, @existing_comment]
# PUT /articles/1/admin/comments/1
[@article, :admin, @new_comment]
# POST /articles/1/admin/comments
В вашем сценарии @article.comments.build
устанавливает для субъекта построителя формы комментарий (потому что это последний элемент в массиве) и определяет путь / URL и метод, используемый при отправке формы.