#内容
入力フォームによって入力された値をDBに格納するために必要なアクションでの処理を記録。
今回はusersテーブルに新しいユーザーを追加する処理(会員登録処理)を例にとっている。
#form_forを使用
特定のモデルを編集するのに適している、form_forを使用した際の例を紹介する。
###ビューでの処理
今回は会員登録ということにしたので下記のフォームを使用。
電話番号等入力するデータによって適したフォームがあるので、適当に選択する(フォームの種類についての詳細はこちら)。
<%= form_for(@user, url: signup_path, method: :post) do |f| %>
<p>
<%= f.label :name, "アカウント名" %><br>
<%= f.text_field :name %>
</p>
<br>
<p>
<%= f.label :email, "メールアドレス" %><br>
<%= f.email_field :email %>
</p>
<br>
<p>
<%= f.label :password, "パスワード" %><br>
<%= f.password_field :password %>
</p>
<br>
<%= f.submit "登録する" %>
<% end %>
###コントローラでの処理
Userモデルから新しいモデルオブジェクトを生成。
中身はparamsから一度に取得。
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(users_params)
if @user.save
# 会員登録の場合は同時にログインしたいので下の1行が必要
# session[:user_id] = @user.id
flash[:notice] = "会員登録完了"
redirect_to("/")
else
reder("users/new")
end
end
def users_params
params.require(:user).permit(:name, :email, :password)
end
end
###ルーティング
routes.rbではpostの指定も忘れずに。
post "/signup" => "users#create"
#form_tagを使用
モデルと関係しない汎用的なフォームを生成するform_tagを使用した際の例を紹介する。
###ビューでの処理
こちらも会員登録ということにしたので下記のフォームを使用。
フォームは入力してほしいデータに合わせて適当に選択する(フォームの種類についての詳細はこちら)。
<%= form_tag("/users/create") do %>
<p>アカウント名</p>
<input name="name" value="<%= @user.name %>">
<p>メールアドレス</p>
<input name="email" value="<%= @user.email %>">
<p>パスワード</p>
<input type="password" name="password" value="<%= @user.password %>">
<input type="submit" value="新規登録">
<% end %>
###コントローラでの処理
Userモデルから新しいモデルオブジェクトを生成。
中身はparamsから1つずつ取得。
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(
name: params[:name],
email: params[:email],
password: params[:password]
)
if @user.save
session[:user_id] = @user.id
flash[:notice] = "会員登録完了"
redirect_to("/")
else
render("users/new")
end
end
end
##ルーティング
form_for使用の際と同様なので省略。