AR삽질러

Rails 一日一つメソッド (Day15) form_withメソッド 본문

Ruby/RubyOnRails-日本語

Rails 一日一つメソッド (Day15) form_withメソッド

아랑팡팡 2024. 1. 4. 20:17
728x90

 

Rails 一日一つメソッド (Day15) form_withメソッド

 

form_withメソッドとは

 - form_withとは、railsで情報を送信するためのヘルパーメソッドで、form_withを使うことによって、簡単に入力フォームに必要なHTMLを作成することができる。

 

1) 入力された情報をデータベースに保存しない時

<% form_with url: "Pass" do |form| %>
	<!-- Form内容 -->
<% end %>

 

2) 入力された情報をデータベースに保存する時

<%= form_with model: ModelClassのインスタンス do |form| %>
	<!-- Form内容 -->
<% end %>

 


form_withメソッドの使い方

1) model Option

<%= form_with model: Modelのインスタンス do |form| %>
	<!-- Formの内容 -->
<% end %>

 

2) url Option

<%= form_with url: root_path do |form| %>
	<!-- Formの内容 -->
<% end %>

 


form_withの引数

users_controller.rb

def new
	@user = User.new
end

Controllerで作成したインスタンスがnewメソッドで新たに作成されて何も情報を持っていなければ自動的にcreateアクション、findメソッドなどで作成され、すでに情報を持っている場合はupdateアクションへ自動的に振り分けてくれる。

 

view

<%= form_with model: @user do |form| %>
	<%= form.field :name %>
    <%= form.submit %>
<% end %>

 

<form action="/users" method="post" data-remote="true">

 


ネストをしている時の書き方

users_controller.rb

def new
	@article = Artice.find(params[:article_id])
    @comment = Comment.new
end

def edit
	@artice = Artice.find(params[:article_id])
    @comment = Comment.find(params[:id])
end

 - newアクションは'Articel'モデルの特定のインスタンスを探し、新しい Commentインスタンスを生成する。

 - @artucle = Artice.find(params[:article_id])はURLで渡された 'article_id'をパラメータを使って 'Article'DataBaseで該当する記事を探す。

 - @comment = Comment.newは 'Comment'オブジェクトを生成してFormで使う準備をする。

 

View

<%= form_with model: [@article, @commnet] do |form| %>
	<%= form.field :text %>
    <%= form.submit %>
<% end %>

 - form_with model: [@article, @comment] do |form| は '@articel'と '@comment'インスタンスを使ってFormを生成する。

 - URLとHTTPメソッドは @articeと@commentの状態によって決定される。

 


html属性の付け方

<%= form_with @user, 属性: '属性値' do |form| %>
<%= form_with @user, id: 'new_form' do |form| %>

 - form_withを使って '@user'モデルに対するFormを生成し、Form Tagに 'id'属性を 'new_form'で指定している。

 


アクション名で記述する

 - ルーチィングがうまく浮かない時は直接Controller名とアクション名を指定することもできる。

<%= form_with @user, url: { controller: 'users', action: 'index' } do |form| %>
	<%= form.text_field :name %>
    <%= form.submit %>
<% end %>

 


form_withで使用するhtmlタグ

メソッド 用途
form.text_field 一行のテキスト投稿フォーム
form.text_area 複数行のテキスト投稿フォーム
form.number_field 数値入力ボックスを生成
form.search_field 一行の検索フォーム
form.email_field emailアドレス入力boxを生成
form.check_box DataBaseの情報を使わないでCheck Boxを生成
form.collection_check_boxes DataBaseの情報を元にCheck Boxを生成
form.select 選択肢を作成
form.collection_select DataBaseの情報を元に選択肢を生成
form.file_field file選択Boxを生成
form.datatiem_field 日時の入力欄を生成
form.hidden_field 非表紙のForm
form.submit 送信ボタンを生成

 

オプション 用途
class cssのクラスの指定
size フォームの幅を指定
maxlength 入力可能な最大文字数の指定

 

form.text_field

<%= form_with model: @question do |form| %>
    <div>
        <ul>
            text_field <%= form.text_field :title, class: "hoge", size: 30 %>
            <%= form.submit %>
        </ul>
    </div>
<% end %>

form.text_area

<div>
    <ul>text_area <br>
        <%= form.text_area :title, class: "hoge", size: 30 %>
    </ul>
    <hr>
</div>

form.number_field

<div>
    <ul>text_number
        <%= form.number_field :id %>
    </ul>
</div>

 

form.search_field

<div>
    <ul>text search
        <%= form.search_field :title %>
    </ul>
    <hr>
</div>

 

form.email_field

<div>
    <ul>email_field
        <%= form.email_field :title %>
    </ul>
    <hr>
</div>

 

form.check_box

メソッド 用途
class cssのクラスの指定
size Formの幅を指定
checked 初期状態をチェック状態にする

 

<div>
    <ul>check_box
        <%= form.check_box :sex, {checked: false}, "true", "false" %>
        <%= form.check_box :sex, {checked: false}, "true", "false" %>
        <%= form.check_box :sex, {checked: true}, "true", "false" %>
    </ul>
    <hr>
</div>

 

form.radio_button

<%= form.radio_button "保存されるカラム名", "カラムに保存させる内容">
<%= form.radio_button :gender, "M" %>M <%= form.radio_button :gender, "F"%>F
メソッド 用途
class cssのクラスの指定
size フォームの幅を指定
checked trueと指定するとデフォルトでチェクがついた状態になる

 

form.select

<% from.select :保存されるカラム名, [ ["表紙される文字", "保存される値"], ["表紙される文字", "保存される値”] ], {オプション}, { htmlオプション } %>
<% from.select :foot_id, [ ["りんご",1], ["バナナ",2], ["いちご",3] ], prompt: "好きな果物を選んでください!", { class: "hoge", id: "fuga" } %>
728x90
반응형
LIST