質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

6059閲覧

RailsでDBに保存ができない

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

1グッド

1クリップ

投稿2017/12/13 07:12

いつもお世話になっております。
Rails5でWebアプリを作っており、今簡単なログインフォームを作っているのですが、DBへの保存ができず困っております。
以下が当該のコードになります。

ruby

1#new.html.erb 2<%= form_for @user, :url => {:action => 'create'} do |f| %> 3 <%#= render "shared/errors", object:@users %> 4 <%= f.label "ユーザー名" %> 5 <%= f.text_field :user_name %> 6 <%= f.label "パスワード" %> 7 <%= f.password_field :password %> 8 <%= f.submit "登録", class: "btn btn-primary"%> 9<p>ログインは<a href="<%= users_path %>">こちら</a></p> 10<% end %>

ruby

1#users_controller 2class UsersController < ApplicationController 3 def index 4 end 5 6 def new 7 @user = User.new(user_params) 8 end 9 10 def create 11 @user = User.new(user_params) 12 if @user.save 13 redirect_to root_path 14 else 15 render :new 16 end 17 end 18 19 def edit 20 end 21 22 def update 23 end 24 25 def delete 26 end 27 28 private 29 30 def user_params 31 { 32 user_name: params[:user_name], 33 password: params[:password] 34 } 35 end 36end

modelには何も記述していません。
ログとコンソールでパラメータを見たのですが、

Started POST "/users/create" for ::1 at 2017-12-12 20:33:19 +0900 Processing by UsersController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"P3Hz9j9NZ+x5YW8shCwY4L2BfCuq+RL6BzD+1Z+Sh2/RntHwITuPHMWzT460zXaPnmim4mvpoeBTZ2fNAw+6/g==", "user"=>{"user_name"=>"aaaaaa", "password"=>"[FILTERED]"}, "commit"=>"登録"} From: /Users/XXXXXXX/workspace/myapp/app/controllers/users_controller.rb @ line 12 UsersController#create: 9: def create 10: @user = User.new(user_params) 11: binding.pry => 12: if @user.save 13: redirect_to root_path 14: else 15: render :new 16: end 17: end [1] pry(#<UsersController>)> @user => #<User:0x007faebfd19eb0 id: nil, user_name: nil, created_at: nil, updated_at: nil, password: nil> [2] pry(#<UsersController>)> exit (0.6ms) BEGIN SQL (3.5ms) INSERT INTO `users` (`created_at`, `updated_at`) VALUES ('2017-12-12 11:33:39', '2017-12-12 11:33:39') (2.1ms) COMMIT Redirected to http://localhost:3000/ Completed 302 Found in 19707ms (ActiveRecord: 6.2ms)

送信ボタンを押した時点ではパラメータ内にあるのに、Controllerに来た時点で中身がなくなってしまっています。
idやcreated_atなどは保存ができています。
思い当たることは特にないのですが…

初歩的な質問で申し訳ないですが、ご教授いただければと思います。
どうぞよろしくお願い致します。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コンソールのダンプを見ての通り、paramsの中にあるパラメータは、2段のハッシュのような形になっています。

ruby

1 def user_params 2 { 3 user_name: params[:user][:user_name], 4 password: params[:user][:password] 5 } 6 end

のように、正しい箇所から値を取る必要があります。

投稿2017/12/13 07:16

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/13 07:21

なるほど…!確かにそうですね。見落としていました。 form_forを使っているのでハッシュっぽくなっているということなのでしょうか?
maisumakun

2017/12/13 07:22

そうですね、モデルの「user」が自動で振られます。
退会済みユーザー

退会済みユーザー

2017/12/13 07:24

そういうことなのですね。今までform_forをあまり使わなかったので、勉強になりました。 お早めのご回答、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問