У меня вопрос из двух частей о 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 вместо nil, что по ошибке и т. Д.» Я также пробовал
<% form_for @article, @comment do |f| %>
Это отображается правильно, но связывает f.text_area с полем 'text' статьи вместо комментария и представляет html для атрибута article.text в этой текстовой области. Так что я, кажется, тоже ошибаюсь. Мне нужна форма, «submit» которой вызовет действие create в CommentsController с идентификатором article_id в параметрах, например, запрос на публикацию в / article / 1 / comments.
Вторая часть моего вопроса: как лучше всего создать экземпляр комментария для начала? Я создаю @comment в действии show объекта ContentController, поэтому объект комментария будет в области действия помощника form_for. Затем в действии create объекта CommentsController я создаю новый @comment, используя параметры, переданные из form_for.
Спасибо!
источник
[@result, @course]
сработало, ноform_for(@result, url: { action: "create" })
тоже работает. Для этого нужны только последнее название модели и название метода.Убедитесь, что оба объекта созданы в контроллере:
@post
и@comment
для сообщения, например:Тогда на виду:
Обязательно укажите массив в form_for явно, а не только через запятую, как указано выше.
источник
В форме не нужно делать ничего особенного. Вы просто правильно создаете комментарий в действии show:
а затем создайте для него форму в просмотре статьи:
по умолчанию этот комментарий перейдет к
create
действиюCommentsController
, которое вы, вероятно, захотите вставить,redirect :back
чтобы вернуться наArticle
страницу.источник
form_for([@article, @new_comment])
формат. Я думаю, это потому, что я показываю видcomments#new
, а неarticle#new_comment
. Я полагаю, чтоarticle#new_comment
Rails достаточно умен, чтобы понять, во что вложен объект комментария, и поэтому вам не нужно его указывать?