質問編集履歴

1 引用するビューファイルの内容が間違っておりましたので訂正します。

xk2ykx

xk2ykx score 9

2018/08/27 21:46  投稿

Rails Tutorial7章終盤にて、ユーザー登録画面で登録を行ってもデータベースが更新されない。
はじめまして。
症状はタイトルの通りです。どういった順序でそういった症状が起こるのかというと…
### ① /signup にて、アカウント情報の登録を行う。
![イメージ説明](b10ec99e8ebb36bd78383d626884796c.png)
以下の情報で登録を行いました。
Name : testtest
Email : abc@abc.com
password : aaaaaaaa1
Confirmation : aaaaaaaa1
---
### ② Create my accountボタンを押すと、以下のような画面が表示される。
![イメージ説明](a1caed105eccda3db4f29177b73ee88c.png)
エラー内容が、「フォームにエラーが3つあります。①パスワードの欄が空です ②パスワードの欄が空です ③パスワードが6文字未満です。」という記載です。
---
と言った状態です。
参考になると思われる情報といたしましては、
①当該サーバーログ
```
Started POST "/signup" for 114.158.180.27 at 2018-08-27 12:29:02 +0000
Cannot render console from 114.158.180.27! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by UsersController#create as HTML
 Parameters: {"utf8"=>"✓", "authenticity_token"=>"/5mjQNvuP/DdixxpEkiD1eJruvvZJZpgWc+JsI59XqbieguxxG2trAsazmypzLXbUK+mcfrrCnLqpwIZ2XXd5A==", "user"=>{"name"=>"testtest", "email"=>"abc@abc.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create my account"}
Unpermitted parameter: :password
  (0.1ms) begin transaction
 User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER(?) LIMIT ? [["email", "abc@abc.com"], ["LIMIT", 1]]
  (0.0ms) rollback transaction
 Rendering users/new.html.erb within layouts/application
 Rendered shared/_error_messages.html.erb (0.7ms)
 Rendered users/new.html.erb within layouts/application (3.5ms)
 Rendered layouts/_rails_default.html.erb (25.8ms)
 Rendered layouts/_shim.html.erb (0.2ms)
 Rendered layouts/_header.html.erb (0.5ms)
 Rendered layouts/_footer.html.erb (0.3ms)
Completed 200 OK in 41ms (Views: 36.2ms | ActiveRecord: 0.3ms)
```
②user.rb
```app/models/user.rb
class User < ApplicationRecord
 before_save { self.email = email.downcase }
 validates :name, presence: true, length: { maximum: 50 }
 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
 validates :email, presence: true, length: { maximum: 255 },
                   format: { with: VALID_EMAIL_REGEX },
                   uniqueness: { case_sensitive: false }
 has_secure_password
 validates :password, presence: true, length: { minimum: 6 }
end
```
③/signupのビューファイル
```app/views.html.erb
class User < ApplicationRecord
 before_save { self.email = email.downcase }
 validates :name, presence: true, length: { maximum: 50 }
 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
 validates :email, presence: true, length: { maximum: 255 },
                   format: { with: VALID_EMAIL_REGEX },
                   uniqueness: { case_sensitive: false }
 has_secure_password
 validates :password, presence: true, length: { minimum: 6 }
end
<% provide(:title, 'Sign up') %>
<h1>Sign up</h1>
<div class="row">
 <div class="col-md-6 col-md-offset-3">
   <%= form_for(@user , url: signup_path ) do |f| %>
     <%= render 'shared/error_messages' %>
     
     <%= f.label :name %>
     <%= f.text_field :name, class: 'form-control' %>
     <%= f.label :email %>
     <%= f.email_field :email,class: 'form-control' %>
     <%= f.label :password %>
     <%= f.password_field :password, class: 'form-control' %>
     <%= f.label :password_confirmation, "Confirmation" %>
     <%= f.password_field :password_confirmation, class: 'form-control' %>
     <%= f.submit "Create my account", class: "btn btn-primary" %>
   <% end %>
 </div>
</div>
```
私は、パスワードやEmailのバリデートに問題があるか、ビューのタグに問題があって正常にフォームのデータが送信出来ずにこのようなこと起きているのだと思いますが、Rails tutorialの内容を再度読んでみても、どこが悪いか等が全くわかりません。また、またサーバーログに出現する"rollback transaction"等検索をしてみましたが、これと言った解決策がなく、前に進むことができずに困っています。
初心者の質問であり、多々突っ込みどころがあるとは思うのですが、必要な情報があればその都度開示したいと思っておりますので、是非、ご教授頂けないでしょうか。
よろしくお願いいたします。
  • Ruby

    17616 questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails 5

    5967 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る