2017-04-02 3 views
0
<%= form_for [@blog,@blog.comments.build] do |f| %> 
    <p><%= f.text_area :text, :size => '40x10' %> </p> 
    <p><%= f.submit "Post Comment" %> </p> 
<% end %> 

これはcomments_controllerによってハンドラですが、私は、それがテキストボックスにフォームを追加し、特にのform_forコード内で次のフォームは何をしますか?

答えて

0

のために、その理由を知っているボタンやコメントを入力するための隠しフィールドに関連するいくつかの隠し認証を提出したいと思います。 コメントが関係を持つオブジェクトを@blogために追加されます。

にhas_many:だから、全体的なblog.comments.build

@

:コメント

コメントはコードでビルドしていない場合によって存在し、 @ blogオブジェクトにコメントを入力するためのフォームが用意されています。この場合、ブログオブジェクトが必要です。コメントはデフォルトでコメントレコード列 "blog_id"の適切な列のブログエントリに自動的に結合されます。

これはネストされたフォームリレーションシップと呼ばれ、コメントのレコードを1つだけ編集するのではなく、親オブジェクトを結合して編集することができます。

ビルドは、基本的にオブジェクトの構造を作成するために使用されます。新しいもの(例:Model.new)です。フォームアクションは、与えられたオブジェクトに基づいて決定されます。あなたの場合、オブジェクトは@blogと@ blog.comments.buildです。呼び出されるアクションは、ブログコントローラの更新か、コメントコントローラの作成のいずれかになります。

これは役に立ちます。

+0

はblog.comments.buildと行動していますか?コメントコントローラには作成アクションしかありませんか? –

+0

ビルドは基本的にオブジェクトの構造体を作成するために使用されます。新しいもの(例:Model.new)です。 – Mayank

0

form_forは、渡されたオブジェクトの作成または更新用のフォームを作成します。オブジェクトが永続化されていない場合、関連付けられたURLは作成アクションをターゲットにします。さもなければ、目標とされたアクションが更新されます。 form_forは、さまざまな種類のパラメータを受け取ってフォームを生成できます。あなたがRailsのurl_helpersドキュメントをチェックアウトする場合

、あなたはあなたのような何かを行うことができます表示されます。

<%= link_to 'First comment', blog_comment_path([@blog, @blog.comments.first]) %> 

この

/posts/@post.id/comments/@post.comments.first.idのようなパスを持つブログの最初のコメントへのリンクを生成します。また、これは、あなたの routes.rbに正しいセットアップを持っていることを前提としています

これにより
resources :blogs do 
    resources :comments 
end 

、あなたは、例えば、リンクやフォームを構築するために使用できるパスの束を生成します。したがって、コード内のform_forも同様に動作します。それをurl_helperと考えてください。 @blogとその投稿に関連付けられたコメント(@blog.comments.build)があります。コメントはまだ保存されていないので、CommentsController#createをターゲットとするコメントを作成するためのフォームが生成されます。関連するパスは/blogs/@blog.id/commentsのようになり、HTTPメソッドはPOSTになります。

また、詳細情報を取得するためにこれらのリンクをチェック:

Rails Routing

Rails Form Helpers

関連する問題