У меня вопрос из двух частей о form_for и вложенных ресурсах. Допустим, я пишу движок блога, и я хочу связать комментарий к статье. Я определил вложенный ресурс следующим образом:form_for с вложенными ресурсами
map.resources :articles do |articles|
articles.resources :comments
end
Форма комментария в представлении show.html.erb для статей, под самой статье, к примеру, как это:
<%= render :partial => "articles/article" %>
<% form_for([ :article, @comment]) do |f| %>
<%= f.text_area :text %>
<%= submit_tag "Submit" %>
<% end %>
Этот дает ошибку: «Вызывается id для нуля, что было бы ошибочно и т. д.» Я также попытался
<% form_for @article, @comment do |f| %>
Что делает правильно, но относится к f.text_area «текст» полю артикля вместо комментария, и представляет HTML для атрибута article.text в этой области текста. Поэтому, похоже, я тоже ошибаюсь. То, что я хочу, - это форма, чья «submit» будет вызывать действие create в CommentsController со статьей_id в параметрах, например, запрос на отправку/articles/1/comments.
Вторая часть моего вопроса: как создать экземпляр комментария для начала? Я создаю @comment в действии show ArticlesController, поэтому объект комментария будет доступен для помощника form_for. Затем в действии createController, я создаю новый @comment, используя params, переданные из form_for.
Спасибо!
Это работа, но мне пришлось изменить контроллер, как сказал jamuraa. –
Путь Jam работает, но вы можете получить дополнительные маршруты, о которых вы, вероятно, не знаете. Лучше быть явным. – cdunn2001
У меня были вложенные ресурсы, @result внутри @course. Хотя, '[@result, @course]' работал, но 'form_for (@result, url: {action:" create "})' также работает.Для этого требуется только имя последней модели и имя метода. – Anwar