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

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

ただいまの
回答率

87.49%

メソッドの追加方法 (今回はdevise gemにある項目に追加したい)

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 252

score 1

前提・実現したいこと

deviseのgemにもともとある項目(name)(e-mail)(password)(password確認)に
(code)項目を作たい。(password)(code)で二重に確認をして出勤できるようにしたいから。

ここに質問の内容を詳しく書いてください。
ruby on railsで勤怠システムを作っています。
devise機能に追加したい項目(コード)項目を実装中に以下のエラーメッセージが発生しました。
経緯はdeviseのgemを利用してプラスで本人確認の項目を付けようと考えたからです。

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

NoMethodError in Devise::Registrations#new

エラーメッセージ
Showing /Users/gradius/last_model/kintaikun2/app/views/devise/registrations/new.html.haml where line #34 raised:

undefined method `code_field' for #<ActionView::Helpers::FormBuilder:0x00007fecebdb24c0>
Did you mean?  color_field
date_field
phone_field

該当のソースコード

ruby

view/devise/registrations

.AccountPage
.AccountPagetitle %h2 Create Account %h5 新規アカウントの作成 = render "devise/shared/links" .AccountPageform
= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
= devise_error_messages!
.FormField
.FormFieldlabel--normal = f.label :name .FormFieldinput--normal
= f.text_field :name, autofocus: true
.FormField
.FormFieldlabel--normal = f.label :email .FormFieldinput--normal
= f.email_field :email
.FormField
.FormFieldlabel--normal = f.label :password %i (英数字8文字以上) .FormFieldinput--normal
= f.password_field :password, autocomplete: "off"
.FormField
.FormFieldlabel--normal = f.label :password_confirmation .FormFieldinput--normal
= f.password_field :password_confirmation, autocomplete: "off"
.FormField
.FormFieldlabel--normal = f.label :code .FormFieldinput--normal
= f.code_field :code
.actions
= f.submit "Create Account", class: 'Button UserButton'

db/migrate/devise_create_users.rb

class DeviseCreateUsers < ActiveRecord::Migration[6.0]
def change
create_table :users do |t|

Database authenticatable

t.string :name,               null: false
t.string :email,              null: false, default: ""
t.string :encrypted_password, null: false, default: ""
t.integer :code,              null: false
t.references :place, foreign_key: true

Recoverable

t.string   :reset_password_token
t.datetime :reset_password_sent_at

Rememberable

t.datetime :remember_created_at

Trackable

t.integer  :sign_in_count, default: 0, null: false

t.datetime :current_sign_in_at

t.datetime :last_sign_in_at

t.string   :current_sign_in_ip

t.string   :last_sign_in_ip

Confirmable

t.string   :confirmation_token

t.datetime :confirmed_at

t.datetime :confirmation_sent_at

t.string   :unconfirmed_email # Only if using reconfirmable

Lockable

t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts

t.string   :unlock_token # Only if unlock strategy is :email or :both

t.datetime :locked_at

t.timestamps null: false
end
add_index :users, :name,                 unique: true
add_index :users, :email,                unique: true
add_index :users, :reset_password_token, unique: true
add_colmun :users, :code,                unique: true

add_index :users, :confirmation_token,   unique: true

add_index :users, :unlock_token,         unique: true

end
end

ここに問題に対して試したことを記載してください。
devise_create_users.rbに
add_column :users, :code, :integerを表記し
ターミナルで rails db:migrateを行った

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

app/controllers/application_controller.rbに

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(
      :sign_up,
      keys:
      [
        :code,
      ]
    )
  end


を記述して下さい。
詳しくは
https://github.com/heartcombo/devise

如何でしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/12/07 19:05

    ご指摘ありがとうございます。
    上記の方法にさらに、テーブル内に[code]カラムを追加し、
    コントローラーのcreateアクションに[private]メソッドの[user_params]の[:user]に追加する内容に
    [:code]を入れてうまく行きました。
    ありがとうございました。

    キャンセル

  • 2020/12/07 19:08

    Database authenticatableを拝見する限りでは、既にcodeカラムは存在してるかと思ったのですが、、、

    キャンセル

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る