form_for とネストされたリソースに関する 2 つの質問があります。ブログエンジンを書いていて、コメントを記事に関連付けたいとしましょう。ネストされたリソースを次のように定義しました。
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 %>
これにより、「誤って nil の id が呼び出されました」というエラーが発生します。私も試してみました
<% form_for @article, @comment do |f| %>
これは正しくレンダリングされますが、コメントではなく記事の「テキスト」フィールドに f.text_area を関連付け、そのテキスト領域に article.text 属性の html を表示します。だから私はこれも間違っているようです。私が欲しいのは、たとえば/articles/1/commentsへの投稿リクエストなど、paramsにarticle_idを使用して、「送信」がCommentsControllerの作成アクションを呼び出すフォームです。
私の質問の 2 番目の部分は、最初にコメント インスタンスを作成する最良の方法は何ですか? ArticlesController の show アクションで @comment を作成しているので、comment オブジェクトは form_for ヘルパーのスコープになります。次に、CommentsController の作成アクションで、form_for から渡されたパラメーターを使用して新しい @comment を作成します。
ありがとう!