11
13

More than 5 years have passed since last update.

【Rails】入力されたデータをポストする

Posted at

内容

入力フォームによって入力された値をDBに格納するために必要なアクションでの処理を記録。
今回はusersテーブルに新しいユーザーを追加する処理(会員登録処理)を例にとっている。

form_forを使用

特定のモデルを編集するのに適している、form_forを使用した際の例を紹介する。

ビューでの処理

今回は会員登録ということにしたので下記のフォームを使用。
電話番号等入力するデータによって適したフォームがあるので、適当に選択する(フォームの種類についての詳細はこちら)。

new.html.erb
<%= 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から一度に取得。

users_controller.rb
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の指定も忘れずに。

config/routes.rb
post "/signup" => "users#create"

form_tagを使用

モデルと関係しない汎用的なフォームを生成するform_tagを使用した際の例を紹介する。

ビューでの処理

こちらも会員登録ということにしたので下記のフォームを使用。
フォームは入力してほしいデータに合わせて適当に選択する(フォームの種類についての詳細はこちら)。

new.html.erb
<%= 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つずつ取得。

qiita.rb
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使用の際と同様なので省略。

11
13
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
11
13