33
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Rails】入力データをテーブルに保存

Posted at

#アクションを作成
今回はテーブルに新しいレコードとして入力データを挿入する。
そのためコントローラにはnewアクションcreateアクションが必要になる。
とりあえずビューを表示したいので、createアクションにおける保存処理についてはあとで追加する。
新しいレコードを作成するので、newアクションの中身は以下のように記述。

users_controller.rb
class UsersController < ApplicationController

	def index
		@users = User.all
	end

	def new
		@user = User.new
	end

	def create
	end
end

ビュー側の処理で変数@userにデータを格納するので、@userの定義をした。

#form_forメソッドを用いたビュー
サンプルとして会員登録画面を作成してみた。
formの使い方の詳細がわからない場合はこちらを参考に。

users/new.html.erb
<head>
	<meta charset="utf-8">
	<link rel="stylesheet" href="members.scss" type="text/css">
</head>
<h1>
	会員登録
</h1>
<body>
	<%= form_for(@user, url: users_path, method: :post) do |f| %>
		<p>
            <%= f.label :name, "アカウント名" %><br>
            <%= f.text_field :name %>
        </p>
		<p>
			<%= f.label :email, "メールアドレス" %><br>
			<%= f.email_field :email %>
		</p>
		<p>
			<%= f.label :password, "パスワード" %><br>
            <%= f.password_field :password %>
		</p>
		<p>
		<%= f.label :password_confirmation, "パスワード確認" %><br>
            <%= f.password_field :password_confirmation %>
		</p>
		<%= f.submit "登録する"%>
	<% end %>
</body>
スクリーンショット 2018-08-30 14.36.39.png

このページで入力したアカウント名、メールアドレス、パスワードをテーブルに挿入したい。
これまでの記述だと、フォームに入力して登録ボタンをクリックした後、指定したURLのページに遷移する。
特にエラーは起きないが、テーブルにデータは挿入されない。
そこで、createアクションに保存処理を記述する必要がある。

#コントローラに保存処理を記述
簡単な保存処理をcreateアクションに記述すると、以下のようになる。

users_controller.rb
	def new
		@user = User.new
	end

	def create
		@user = User.new(user_params)
		if @user.save
			render 'index'
		else
			render 'new'
		end
	end

	private
		def user_params
			params.require(:user).permit(:name, :email, :password)
		end

「登録する」ボタンによってPOSTされたデータがparams
paramsの中身は下のようになっている。
スクリーンショット 2018-08-30 14.48.26.png
.require(:user)によって、このparamsから"user"部を取り出している。
さらに、.permit(:name, :email, :password)によって、nameとemail,passwordカラムへの挿入を許可している。

これらの操作によって入力されたデータを適切に取得したあとは、
saveメソッドを用いてデータをテーブルに保存した。


保存処理に成功した場合、indexアクションのページに遷移するようにしたが、
このような場合、renderredirect_toを使用することができる。

render 'アクション名'

#例
render 'index'
redirect_to rootpath

#例
redirect_to users_path

どちらも同じ機能になる。


###補足
今回入力データを保存する簡単な処理を記述したが、本格的に導入するとなると

・保存トランザクションが失敗した時のロールバック処理周り
・メールアドレスやパスワードのバリデーション

などの機能が必要になってくるが、これらはまた別の記事にまとめる。

33
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?