form_withメソッドについて
Railsでモデルと関連付けたフォームを作成する場合、form_withメソッドを使用すると便利です。
<%= form_with(model: モデルのインスタンス) do |form| %>
//省略
<% end %>
form_withとは、ビューヘルパーの一種です。
ビューヘルパーはRailsに用意された、HTMLを生成するためのメソッドです。
以下のようなHTMLは、
<form action="/tasks" accept-charset="UTF-8" data-remote="true" method="post"><input name="utf8" type="hidden" value="✓"><input type="hidden" name="authenticity_token" value="qbu8RFLhyCuAElg1qr7MLYDEdiEINJdEe1JLQFLr7kyWPFiHCEZKszOrvwON33s9CqGz7njGpBasOzrpYkb8/w==">
<div class="task_name">
<label for="task_name">タスク名</label>
<input type="text" name="task[task_name]">
</div>
<div class="task_content">
<label for="task_content">内容</label>
<input type="text" name="task[content]">
</div>
//省略
<input type="submit" name="commit" value="Create Blog" data-disable-with="Create Task">
</form>
ビューヘルパーを使用することで、以下のように記述できます。
<%= form_with(model: @task, local: true) do |form| %>
<div class="task_name">
<%= form.label :タスク名 %>
<%= form.text_field :task_name %>
</div>
<div class="task_content">
<%= form.label :内容 %>
<%= form.text_field :content %>
</div>
<%= form.submit %>
<% end %>
form_withメソッドにはmodelオプションの引数として、モデルクラスのインスタンスを渡す必要があります。
form_withは、モデルのインスタンスを元に、「formを送信すると、どのようなリクエストを送るか」を決定します。
今回の例でいうと、
<%= form_with(model: Task.new) %>
という記述により、
form_withはHTTPメソッドがPOSTで/tasksというURLを流すためのhtmlのフォームを自動で生成します。
このTask.newは、コントローラー内で@task = Task.new
などといったような形でインスタンス変数に入れられるので、form_withでは<%= form_with(model: @task) %>
という使用方法が一般的です。
また、form_withメソッドは、デフォルトではhtmlではなくJavaScriptのリソースを取得しようとしてしまうので、
local: trueとすることで、HTML用のリクエストを発行するようにします。
formタグとして出力させるので、form_withメソッドは<%= %>
で囲う必要があります。
フォームパーツ
form.label
は、HTMLのlabelタグを作成するメソッドです。
form.text_field
は、
属性(type)をtextに指定した、HTMLのinputタグ(自由入力欄)を作成するメソッドです。
form.submit
は、
属性(type)をsubmitに指定した、HTMLのinputタグ(送信ボタン)を作成するメソッドです。
それぞれdivタグで囲んでいるのは、改行するためです。divタグ、brタグで囲わないと横一列になります。
Author And Source
この問題について(form_withメソッドについて), 我々は、より多くの情報をここで見つけました https://qiita.com/mofuko0213/items/68ab508814a401fd16bd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .