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 %>

Это дает ошибку, "Названный идентификатором для ноля, который был бы по ошибке и т.д.". Я также попробовал

<% form_for @article, @comment do |f| %>

Который представляет правильно, но связывает f.text_area с 'текстовым' полем статьи вместо комментария и представляет HTML для атрибута article.text в той текстовой области. Таким образом, у меня, кажется, есть эта несправедливость также. То, что я хочу, является формой, чья 'отправляют', назовет действие по созданию на CommentsController, с article_id в параметрических усилителях, например, запрос сообщения к/articles/1/comments.

Вторая часть к моему вопросу, что лучший способ состоит в том, чтобы создать экземпляр комментария для начала? Я создаю @comment в выставочном действии ArticlesController, таким образом, объект комментария будет в объеме для form_for помощника. Затем в действии по созданию CommentsController, я создаю новый @comment с помощью параметрических усилителей, переданных в от form_for.

Спасибо!

118
задан Dave Sims 16 April 2012 в 23:04
поделиться

1 ответ

Тебе не нужно делать особые вещи в форме. Вы просто правильно строите комментарий в действии шоу:

class ArticlesController < ActionController::Base
  ....
  def show
    @article = Article.find(params[:id])
    @new_comment = @article.comments.build
  end
  ....
end

и затем создайте форму для него в виде статьи:

<% form_for @new_comment do |f| %>
   <%= f.text_area :text %>
   <%= f.submit "Post Comment" %>
<% end %>

по умолчанию, этот комментарий перейдет к действию создания действия CommentsController, в которое вы, вероятно, захотите поместить redirect :back, так что вы будете перенаправлены обратно на страницу Article.

34
ответ дан 24 November 2019 в 01:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: