2017-05-07 9 views
0

私はUserという名前の足場を作成しています。レールは以来、どこへ行くか何URL /パスを知っているか、あなたは上記のコードによって生成され、送信ボタンをクリックするのであれば送信ボタンをクリックしたときにform_forがどのURL /パスを知っているのですか?

<%= form_for(user) do |f| %> 
    <div class=field> 
     <%= f.label :firstname %> 
     <%= f.text_field :firstname %> 
    </div> 
    <div class="actions"> 
     <%= f.submit %> 
    </div> 
<% end %> 

:私は部分図「_form」のコードをチェックして、私は以下のコードを参照してください探しているパスが指定されていませんでしたか?

+0

Little _rails magic_、[こちら](http://guides.rubyonrails.org/form_helpers.html#binding-a-form-to-an-object)を読んでください。 – Gerry

+0

[レールは\ _form.html.erbで編集するためのメソッド::patchを使用しますか?](http://stackoverflow.com/questions/43795769/does-rails-use-method-patch-for-editing- with-form-html-erb) –

答えて

2

Amr El Bakry's answer以外にも、form_forヘルパーメソッドの背後にあるRailsの魔法を理解できます。

あなたの質問は基本的には:form_forはどのように提出するルートを見つけ、レコードの作成/更新を区別しますか?

Railsは実際にはrecord identificationでこれを並べ替えます。例では、この時点で価値がある:

## Creating a new user 
# long style 
form_for(@user, url: users_path) 
# short style - record identification gets used 
form_for(@user) 

## Updating an existing user 
# long style 
form_for(@user, url: user_path(@user), html: { method: "patch" }) 
# short style - record identification to the rescue 
form_for(@user) 

あなたはショートスタイルは、両方のケースについて同じであることをはっきりと見ることができます。 レコードの識別は、レコードが新しい場合は、または@user.persisted?を呼び出す場合はの既存のレコードを把握するのに十分です。

form_for定義内でこの事実を主張することができます。form_helper.rbオンline 462

希望すると助かります!

2

config/routes.rbファイルでは、足場を生成したときにRailsにresources :usersが追加されています。これはという有能なルートと呼ばれ、userリソース用に7つの異なるルートを作成します。各ルートはHTTP動詞とURLをコントローラー・アクションにマップします。フォームを送信するとき、あなたの場合は

は、HTTP動詞はPOSTは、パスがusersコントローラ内部createアクションにマップされ/usersです。これはRailsのデフォルトであり、Rails Guides on Routingのすべてについて読むことができます。

+0

okこれは、コントローラーのリソースルートによって作成されたルート内にPOST HTTP動詞を持つパターンを探しますか?例えば、 リソース:ユーザ と リソース:投稿 ユーザからフォームビューが作成された場合、リソース:ユーザルートにPOST動詞を持つルートのみが検索されます。 編集についてもどうしますか?フォームが新しいレコードの作成やレコードの編集を意図していることは、どのようにして知ることができますか? – Lou

+0

これは、HTTP動詞と最初の一致を検索し、routesファイルのURL/usersを探します。 @ワシフ・ホセインは、これについて、さらにどのように編集するのかを詳しく説明しました。 – amrrbakry

関連する問題