DeviseでActiveHashを用いた際に発生したエラーについて
解決したいこと
Deviseにてユーザー管理を実装する際に、ActiveHashを組み込んで実装したいのですが、エラーが発生してしまいます。解決の手助けをしていただきたいです。
発生している問題・エラー
NoMethodError in Devise::RegistrationsController#create
undefined method `current_scope' for Occupation:Class
該当するソースコード
models/occupation.rb
class Occupation < ActiveHash::Base
self.data = [
{ id: 1, name: '---' },
{ id: 2, name: '理学療法士' },
{ id: 3, name: '作業療法士' },
{ id: 4, name: '言語聴覚士' },
{ id: 4, name: 'その他' },
]
include ActiveHash::Associations
belongs_to :user
end
registrations/new.html
<body class="container-fluid">
<div class="box">
<h2 class="headline_regi">新規登録</h2>
<%= form_with model: @user, url: user_registration_path, class: 'registration-main', local: true do |f| %>
<%= csrf_meta_tags %>
<div class="form-group">
<label class="user_name">ユーザーネーム</label>
<span class="indispensable">必須</span>
<%= f.text_area :user_name, class: 'form-control', id: 'user_name', placeholder: '例)リハ太郎', maxlength:"40" %>
</div>
<div class="form-group">
<label class="user_name">職業</label>
<span class="indispensable">必須</span>
<%= f.collection_select(:occupation_id, Occupation.all, :id, :name, {}, {class:"select-box", id:"user_occupation"}) %>
</div>
<div class="form-group">
<label class="user_email">メールアドレス</label>
<span class="indispensable">必須</span>
<%= f.email_field :email, class: 'form-control', id: 'user_email', placeholder: 'PC、携帯どちらでも可', autofocus: true %>
</div>
<div class="form-group">
<label class="user_password">パスワード</label>
<span class="indispensable">必須</span>
<%= f.password_field :password, class: 'form-control', id: 'user_password', placeholder: '8文字以上の半角英数字' %>
<p class='info-text'>※英字と数字の両方を含めて設定してください</p>
</div>
<div class="form-group">
<label class="user_password">パスワード(確認)</label>
<span class="indispensable">必須</span>
<%= f.password_field :password_confirmation, class:"form-control", id:"password-confirmation", placeholder:"同様のパスワードを入力" %>
</div>
<div class="form-group">
<label class="last_name">名字</label>
<span class="indispensable">必須</span>
<%= f.text_area :last_name, class: 'form-control', id: 'user_last_name', placeholder: '例)山田' %>
</div>
<div class="form-group">
<label class="first_name">名前</label>
<span class="indispensable">必須</span>
<%= f.text_area :first_name, class: 'form-control', id: 'user_first_name', placeholder: '例)太郎' %>
</div>
<div class="divider-form"></div>
<p class="text-center">※ 本人情報は正しく入力してください。会員登録後、修正するにはお時間を頂く場合があります。</p>
<div class="text-center">
<p class='text-center'>
「会員登録」のボタンを押すことにより、
<span>利用規約</span>
<br>に同意したものとみなします
</p>
</div>
<%= f.submit "登録する" ,class: 'btn-primary' %>
<p class="text-center">すでにアカウントをお持ちの方はこちら <%= link_to 'ログイン', '#' %></p>
<% end %>
</div>
</body>
ruby
models/user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to :occupation
validates :user_name, presence: true
PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i.freeze
validates_format_of :password, with: PASSWORD_REGEX, message: 'には英字と数字の両方を含めて設定してください'
validates :last_name, presence: true, length: { maximum: 50 }, format: { with: /\A[ぁ-んァ-ヶ一-龥々ー]+\z/ }
validates :first_name, presence: true, length: { maximum: 50 }, format: { with: /\A[ぁ-んァ-ヶ一-龥々ー]+\z/ }
validates :occupation_id, numericality: { other_than: 1, message: "職業を選択してください。"}
end
自分で試したこと
・`current_scope' というメソッドを使用した覚えがないので、一通りのファイルのメソッドのスペルミスをチェックしました。
・Google検索を行い、似たようなエラーがないかを検索
→同様のエラー文が発生している例は見つけたのですが、そちらは「extend ActiveHash::Associations::ActiveRecordExtensions」の記述がなかったことでエラーが発生していたようで、その記述は今回は記載しているので、当てはまりませんでした。
0