【Ruby on Rails】登録フォームを作成し、データベースを保存する
Ruby on Rails

【Ruby on Rails】登録フォームを作成し、データベースを保存する

作成日:2022年08月23日
更新日:2022年12月27日

前回は、Ruby on Rails でルーティングを設定しました。

ruby-on-rails-rooting

【Ruby on Rails】ルーティングを設定する

今回は、登録フォームを作成し、データベースを保存します。

登録フォームを作成

まずは、登録フォームを作成します。

app フォルダの controllers フォルダにある fluits_controller.rb を開きます。

FluitsController 内に

ruby
def new
@fluits = Fluit.new
end

を追加することで、new の画面内で fluits をインスタンス化しています。

views フォルダ内にある fluits フォルダの new.html.erb を開きます。

form_withを使うことにより、Rails でフォームを自動生成してくれます。

項目は、name と price なので、form.labelform.text_fieldに:name と:price を指定し、フォームを作成します。

送信ボタンは、form.submitを設定します。

ruby
<h1>登録</h1>
<%= form_with model: @fluits do |form| %>
<div>
<%= form.label :name %>
<%= form.text_field :name %>
</div>
<div>
<%= form.label :price %>
<%= form.text_field :price %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>

登録画面を確認すると、

image2

フォームを作成することができました。

外部から勝手にデータを改ざんできないようにする

今のままだと、フォームを改ざんすることができるので、name と price 以外の内容を送信できないようにします。

views フォルダ内にある fluits フォルダの new.html.erb を開きます。

private メソッドを作成します。

fluit_paramsメソッドを作成し、paramsrequireを設定します。

requireで name と price のみ許可します。

ruby
private
def fluit_params
params.require(:fluit).permit(:name, :price)
end

fluit_paramsメソッドを送信内容で使用します。

送信内容をデータベースへ保存する

送信内容をデータベースへ保存します。

new.html.erb 内でcreateメソッドを作成します。

まずは、Fluit モデルを初期化します。

newの中に先程作成した、fluit_paramsを指定します。

saveで Fluit モデルを保存します。

ruby
def create
@fluits = Fluit.new(fluit_params)
@fluits.save
end

一通り完成したので、動作確認します。

送信画面で内容を入力し、送信ボタンを押します。

image3

fluits の index 画面で確認すると、

image4

先程送信したみかんが表示されました。

new.html.erb の全文は、以下の通りです。

ruby
class FluitsController < ApplicationController
def index
@fluits = Fluit.all
end
def new
@fluits = Fluit.new
end
def create
@fluits = Fluit.new(fluit_params)
@fluits.save
end
private
def fluit_params
params.require(:fluit).permit(:name, :price)
end
end

© 2024あずきぱんウェブスタジオ