rinrin_abc1818
@rinrin_abc1818

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

DeviseでActiveHashを用いた際に発生したエラーについて

解決したいこと

Deviseにてユーザー管理を実装する際に、ActiveHashを組み込んで実装したいのですが、エラーが発生してしまいます。解決の手助けをしていただきたいです。

発生している問題・エラー

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

スクリーンショット 2023-10-08 16.17.11.png

該当するソースコード

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

1Answer

Your answer might help someone💌