Ruby on Rails5、rubyは2.4.0を用いて
初めてdeviseというgemを使用してuesrログインの機能を追加しました。
emailとパスワードによるログインは正常に行うことができました。
そこで次にnameカラムを追加しようと思い、name絡むを追加するmigrationファイルを作成しました。作成されたのが以下のファイルです。
ruby
1class AddNameToUsers < ActiveRecord::Migration[5.1] 2 def change 3 add_column :users, :name, :string 4 end 5end
また調べながらuser.rbの編集も行いました。編集したのが以下になります。
ruby
1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :trackable, :validatable, :omniauthable 6 7 def self.find_for_oauth(auth) 8 user = User.where(uid: auth.uid, provider: auth.provider).first 9 10 unless user 11 user = User.create( 12 uid: auth.uid, 13 provider: auth.provider, 14 name: auth.info.name, 15 email: User.dummy_email(auth), 16 password: Devise.friendly_token[0, 20] 17 ) 18 end 19 20 user 21 end 22 23 private 24 25 def self.dummy_email(auth) 26 "#{auth.uid}-#{auth.provider}@example.com" 27 end 28end
そしてもちろんview/refistrations/new.html.erbやedit.html.erbにはフォームもnameフォームも作成いたしました。
ruby
1<h2>Sign up</h2> 2<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 3 <%= devise_error_messages! %> 4 5 <div class="field"> 6 <%= f.label :name %><br /> 7 <%= f.text_field :name, autofocus: true, :placeholder => '名前', class: 'form-control login_mail_form font-awesome' %> 8 </div> 9以下省略
しかしいずれもviewではエラーが出ないものの保存がされないです。
コマンドからuser登録をさせようとすると以下のように出て来ます。
ruby
1irb(main):004:0> user3 = User.new(email: "hoge@gmail.com",name:"testuser3") 2=> #<User id: nil, email: "hoge@gmail.com", created_at: nil, updated_at: nil, uid: nil, provider: nil, name: "testuser3"> 3irb(main):005:0> user3.save 4 (0.2ms) begin transaction 5 User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = ? LIMIT ? [["email", "hoge@gmail.com"], ["LIMIT", 1]] 6 (0.1ms) rollback transaction 7=> false
多くのサイトを拝見するも解決方法が見つからず長いことここでつまずいております。
解決方法のわかるかた、心当たりある方、気になる点がある方、ぜひともご教授いただけますと大変嬉しく思います。
何卒よろしくお願いいたします。
###追記
UsersControllerです。
ruby
1class UsersController < ApplicationController 2 before_action :set_user, only: [ :update, :destroy ] 3 4 def index 5 @users = User.all 6 end 7 8 def show 9 @user = User.find(params[:id]) 10 end 11 12 13 def edit 14 end 15 16 def update 17 if @user.update( user_params ) 18 redirect_to root_path 19 else 20 render :edit 21 end 22 end 23 24 def destroy 25 if @user.destroy 26 redirect_to root_path 27 else 28 render :edit 29 end 30 end 31 32 private 33 def set_user 34 @user = User.find( params[:id] ) 35 end 36 37 def user_params 38 params.require(:user).permit(:email, :password, :name) 39 end 40end
回答2件
あなたの回答
tips
プレビュー