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

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

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

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

1145閲覧

ruby on railsでdeviseを使ってユーザー登録したいが入力したデータを送信するとエラーが出てしまう

yousuke44

総合スコア2

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/07/10 07:13

前提・実現したいこと

大学の教科書販売サイトを作成していて、ruby on railsでdeviseを使ってユーザー登録をしたいのですが、各項目にデータを入力して送信すると以下のようなエラーが出てしまいテーブルにデータが保存されません。

発生している問題・エラーメッセージ

NoMethodError in Devise::RegistrationsController#create undefined method `current_scope' for University:Class

該当のソースコード

app > controllers > application_controller.rb

ruby

1class ApplicationController < ActionController::Base 2 before_action :basic_auth 3 before_action :configure_permitted_parameters, if: :devise_controller? 4 5 private 6 def basic_auth 7 authenticate_or_request_with_http_basic do |username, password| 8 username == ENV["BASIC_AUTH_USER"] && password == ENV["BASIC_AUTH_PASSWORD"] 9 end 10 end 11 12 def configure_permitted_parameters 13 devise_parameter_sanitizer.permit(:sign_up, 14 keys: [:nickname, :university_id, :department_id, :birthday]) 15 end 16end

app > models >user.rb

ruby

1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6 7 belongs_to :university 8 belongs_to :department 9 10 with_options presence: true do 11 validates :nickname 12 validates :birthday 13 14 with_options numericality: { other_than: 1 } do 15 validates :university_id 16 validates :department_id 17 end 18 end 19 20 PASSWORD_REGEX = /\A(?=.*[a-zA-Z])(?=.*?\d)[a-zA-Z\d]+\z/i.freeze 21 validates_format_of :password, with: PASSWORD_REGEX, message: 'contain both letters and nembers' 22end

app > models > university.rb

ruby

1class University < ActiveHash::Base 2 self.data = [ 3 { id: 1, name: '---' }, 4 { id: 2, name: '明治大学' }, 5 { id: 3, name: '青山学院大学' }, 6 { id: 4, name: '立教大学' }, 7 { id: 5, name: '中央大学' }, 8 { id: 6, name: '法政大学' }, 9 ] 10 11 include ActiveHash::Associations 12 has_many :users 13end

app > models > department.rb

ruby

1class Department < ActiveHash::Base 2 self.data = [ 3 { id: 1, name: '---' }, 4 { id: 2, name: '法学部' }, 5 { id: 3, name: '商学部' }, 6 { id: 4, name: '政治経済学部' }, 7 { id: 5, name: '文学部' }, 8 { id: 6, name: '理工学部' }, 9 { id: 7, name: '農学部' }, 10 { id: 8, name: '経営学部' }, 11 { id: 9, name: '情報コミュニケーション学部' }, 12 { id: 10, name: '国際日本学部' }, 13 { id: 11, name: '総合数理学部' }, 14 ] 15 16 include ActiveHash::Associations 17 has_many :users 18end

app > views > devise > registrations > new.html.erb

ruby

1<%= render "shared/second-header"%> 2 3<%= form_with model: @user, url: user_registration_path, class: 'registration-main', local: true do |f| %> 4 <div class='form-wrap'> 5 <div class='form-header'> 6 <h1 class='form-header-text'> 7 会員情報 8 </h1> 9 </div> 10 11 <div class="form-group"> 12 <div class='form-text-wrap'> 13 <label class="form-text">ニックネーム</label> 14 <span class="indispensable">必須</span> 15 </div> 16 <%= f.text_area :nickname, class:"input-default", id:"nickname", placeholder:"例)セカンド次郎", maxlength:"20" %> 17 </div> 18 <div class="form-group"> 19 <div class='form-text-wrap'> 20 <label class="form-text">メールアドレス</label> 21 <span class="indispensable">必須</span> 22 </div> 23 <%= f.email_field :email, class:"input-default", id:"email", placeholder:"大学から配布されたアドレスを入力", autofocus: true %> 24 </div> 25 <div class="form-group"> 26 <div class='form-text-wrap'> 27 <label class="form-text">パスワード</label> 28 <span class="indispensable">必須</span> 29 </div> 30 <%= f.password_field :password, class:"input-default", id:"password", placeholder:"6文字以上の半角英数字" %> 31 <p class='info-text'>※英字と数字の両方を含めて設定してください</p> 32 </div> 33 <div class="form-group"> 34 <div class='form-text-wrap'> 35 <label class="form-text">パスワード(確認)</label> 36 <span class="indispensable">必須</span> 37 </div> 38 <%= f.password_field :password_confirmation, class:"input-default", id:"password_confirmation", placeholder:"同じパスワードを入力して下さい" %> 39 </div> 40 <div class="form-group"> 41 <div class='form-text-wrap'> 42 <label class="form-text">大学名</label> 43 <span class="indispensable">必須</span> 44 </div> 45 <%= f.collection_select(:university_id, University.all, :id, :name, {}, {class:"input-default", id:"university"}) %> 46 </div> 47 <div class="form-group"> 48 <div class='form-text-wrap'> 49 <label class="form-text">学部名</label> 50 <span class="indispensable">必須</span> 51 </div> 52 <%= f.collection_select(:department_id, Department.all, :id, :name, {}, {class:"input-default", id:"department"}) %> 53 </div> 54 <div class="form-group"> 55 <div class='form-text-wrap'> 56 <label class="form-text">生年月日</label> 57 <span class="indispensable">必須</span> 58 </div> 59 <div class='input-birth-wrap'> 60 <%= raw sprintf( 61 f.date_select( 62 :birthday, 63 class:'select-birth', 64 id:"birthday", 65 use_month_numbers: true, 66 prompt:'--', 67 start_year: 1930, 68 end_year: (Time.now.year - 5), 69 date_separator: '%s'), 70 "<p> 年 </p>", "<p> 月 </p>") + "<p> 日 </p>" %> 71 </div> 72 </div> 73 <div class='register-btn'> 74 <%= f.submit "会員登録" ,class:"register-red-btn" %> 75 </div> 76 </div> 77<% end %>

db > migrate > 20210708035000_devise_create_users.rb

ruby

1# frozen_string_literal: true 2 3class DeviseCreateUsers < ActiveRecord::Migration[6.0] 4 def change 5 create_table :users do |t| 6 ## Database authenticatable 7 t.string :nickname, null: false 8 t.string :email, null: false, default: "" 9 t.string :encrypted_password, null: false, default: "" 10 t.integer :university_id, null: false 11 t.integer :department_id, null: false 12 t.date :birthday, null: false 13 14 ## Recoverable 15 t.string :reset_password_token 16 t.datetime :reset_password_sent_at 17 18 ## Rememberable 19 t.datetime :remember_created_at 20 21 ## Trackable 22 # t.integer :sign_in_count, default: 0, null: false 23 # t.datetime :current_sign_in_at 24 # t.datetime :last_sign_in_at 25 # t.string :current_sign_in_ip 26 # t.string :last_sign_in_ip 27 28 ## Confirmable 29 # t.string :confirmation_token 30 # t.datetime :confirmed_at 31 # t.datetime :confirmation_sent_at 32 # t.string :unconfirmed_email # Only if using reconfirmable 33 34 ## Lockable 35 # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts 36 # t.string :unlock_token # Only if unlock strategy is :email or :both 37 # t.datetime :locked_at 38 39 40 t.timestamps null: false 41 end 42 43 add_index :users, :email, unique: true 44 add_index :users, :reset_password_token, unique: true 45 # add_index :users, :confirmation_token, unique: true 46 # add_index :users, :unlock_token, unique: true 47 end 48end

試したこと

カラム名との相違がないかなどのスペルチェックを行いました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

userのmodelに
extend ActiveHash::Associations::ActiveRecordExtensions
の記載がないように見えます。
ActiveHashを使用しているので、active_hash側にinclude ActiveHash::Associations、Active_Recordのモデル側にextend ActiveHash::Associations::ActiveRecordExtensions の記載となるかと思います。

投稿2021/07/11 02:45

J_O

総合スコア143

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

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

yousuke44

2021/07/11 05:06

ありがとうございます。ご指摘の通り修正したところエラー解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問