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

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

登録フォームを作成

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

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

FluitsController 内に

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を設定します。

<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 のみ許可します。

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

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

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

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

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

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

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

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

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

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

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

image3

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

image4

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

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

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
ブログ一覧