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

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

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

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

Ruby

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

1060閲覧

rails のユーザー管理機能実装でenumを取り入れたが0でしか保存されないので選択した値が保存されるようにしたい

risaiwata

総合スコア2

Devise

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

Ruby

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/05/14 10:24

編集2021/05/14 11:14

前提・実現したいこと

Ruby on railsでオリジナル釣果投稿アプリケーションを作っているのですが、
ユーザー管理機能でdevise導入後にanglerユーザーとagentユーザーに分けてそれぞれユーザー管理機能を実装しているところです。
agentユーザーではenumを使って都道府県と業種と釣り方をプルダウン選択を実装しデータベース側に情報を保存したいです。

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

新規登録はできるが、enumで選択された値が全て0で保存されてしまう。

該当のソースコード

app>model>agent.rb

ruby

1class Agent < ApplicationRecord 2 3 4 # Include default devise modules. Others available are: 5 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 6 devise :database_authenticatable, :registerable, 7 :recoverable, :rememberable, :validatable 8 9 enum prefecture: { 10 "--都道府県--":0,北海道:1,青森県:2,岩手県:3,宮城県:4,秋田県:5,山形県:6,福島県:7, 11 茨城県:8,栃木県:9,群馬県:10,埼玉県:11,千葉県:12,東京都:13,神奈川県:14, 12 新潟県:15,富山県:16,石川県:17,福井県:18,山梨県:19,長野県:20, 13 岐阜県:21,静岡県:22,愛知県:23,三重県:24, 14 滋賀県:25,京都府:26,大阪府:27,兵庫県:28,奈良県:29,和歌山県:30, 15 鳥取県:31,島根県:32,岡山県:33,広島県:34,山口県:35, 16 徳島県:36,香川県:37,愛媛県:38,高知県:39, 17 福岡県:40,佐賀県:41,長崎県:42,熊本県:43,大分県:44,宮崎県:45,鹿児島県:46,沖縄県:47 18 }, _prefix: true 19 20 enum ship_type: { 21 "--業種--":0, 22 乗合:1,仕立:2,渡船:3,筏・カセ:4,レンタルボート:5,その他:6 23 }, _prefix: true 24 25 enum fishing_type: { 26 "--釣り方--":0, 27 コマセ(撒き餌):1,サビキ:2,胴突き:3,活きエサ・泳がせ:4,天びん:5,五目釣り:6,磯釣り:7, 28 筏・カセ釣り:8,スッテ・ツノ:9,エギング:10,タイラバ:11, ひとつテンヤ:12,ジギング・キャスティング:13, 29 その他の釣り方:14 30 }, _prefix: true 31end 32

app>controller>agents>registration_controller.rb

ruby

1class Agents::RegistrationsController < Devise::RegistrationsController 2 before_action :configure_sign_up_params, only: [:create] 3 # before_action :configure_account_update_params, only: [:update] 4 5 # GET /resource/sign_up 6 def new 7 #@results = Agent.where('prefecture_id IN(?)', params[:prefecture_id]) 8 super 9 end 10 11 # POST /resource 12 # def create 13 # super 14 # end 15 16 # GET /resource/edit 17 # def edit 18 # super 19 # end 20 21 # PUT /resource 22 # def update 23 # super 24 # end 25 26 # DELETE /resource 27 # def destroy 28 # super 29 # end 30 31 # GET /resource/cancel 32 # Forces the session data which is usually expired after sign 33 # in to be expired now. This is useful if the user wants to 34 # cancel oauth signing in/up in the middle of the process, 35 # removing all OAuth session data. 36 # def cancel 37 # super 38 # end 39 40 # protected 41 42 # If you have extra params to permit, append them to the sanitizer. 43 def configure_sign_up_params 44 devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute, :agentname, :agentname_kana, :first_name, :last_name, :first_name_kana, :last_name_kana, :prefecture_id, :address, :harbor, :how_to_go1, :how_to_go2, :tel1, :tel2, :homepage, :regular_holiday, :ice, :target, :ship_type_id, :fishing_type_id, :profile]) 45 end 46 47 # If you have extra params to permit, append them to the sanitizer. 48 # def configure_account_update_params 49 # devise_parameter_sanitizer.permit(:account_update, keys: [:attribute]) 50 # end 51 52 # The path used after sign up. 53 # def after_sign_up_path_for(resource) 54 # super(resource) 55 # end 56 57 # The path used after sign up for inactive accounts. 58 # def after_inactive_sign_up_path_for(resource) 59 # super(resource) 60 # end 61end 62

erb

1<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 2中略 3<--! 都道府県のプルダウン --> 4<div class="form-group"> 5 <div class='form-text-wrap'> 6 <label class="form-text">都道府県</label> 7 <span class="indispensable">必須</span> 8 </div> 9 <%= f.select(:prefecture_id, Agent.prefectures.keys,{}, {class: 'hoge'}) %> 10 </div> 11 12中略 13<--! 業種と釣り方のプルダウン --> 14<div class="form-group"> 15 <div class='form-text-wrap'> 16 <label class="form-text">主な業種</label> 17 <span class="indispensable">必須</span> 18 </div> 19 <%= f.select(:ship_type_id, Agent.ship_types.keys,{}, {class: 'hoge'}) %> 20 </div> 21<div class="form-group"> 22 <div class='form-text-wrap'> 23 <label class="form-text">主な釣り方</label> 24 <span class="indispensable">必須</span> 25 </div> 26 <%= f.select(:fishing_type_id, Agent.fishing_types.keys,{}, {class: 'hoge'}) %> 27 </div> 28中略

ページのソースコード

html

1 <select class="hoge" name="agent[prefecture_id]" id="agent_prefecture_id"><option value="--都道府県--">--都道府県--</option> 2<option value="北海道">北海道</option> 3<option value="青森県">青森県</option> 4<option value="岩手県">岩手県</option> 5<option value="宮城県">宮城県</option> 6<option value="秋田県">秋田県</option> 7<option value="山形県">山形県</option> 8<option value="福島県">福島県</option> 9<option value="茨城県">茨城県</option> 10<option value="栃木県">栃木県</option> 11<option value="群馬県">群馬県</option> 12<option value="埼玉県">埼玉県</option> 13<option value="千葉県">千葉県</option> 14<option value="東京都">東京都</option> 15<option value="神奈川県">神奈川県</option> 16<option value="新潟県">新潟県</option> 17<option value="富山県">富山県</option> 18<option value="石川県">石川県</option> 19<option value="福井県">福井県</option> 20<option value="山梨県">山梨県</option> 21<option value="長野県">長野県</option> 22<option value="岐阜県">岐阜県</option> 23<option value="静岡県">静岡県</option> 24<option value="愛知県">愛知県</option> 25<option value="三重県">三重県</option> 26<option value="滋賀県">滋賀県</option> 27<option value="京都府">京都府</option> 28<option value="大阪府">大阪府</option> 29<option value="兵庫県">兵庫県</option> 30<option value="奈良県">奈良県</option> 31<option value="和歌山県">和歌山県</option> 32<option value="鳥取県">鳥取県</option> 33<option value="島根県">島根県</option> 34<option value="岡山県">岡山県</option> 35<option value="広島県">広島県</option> 36<option value="山口県">山口県</option> 37<option value="徳島県">徳島県</option> 38<option value="香川県">香川県</option> 39<option value="愛媛県">愛媛県</option> 40<option value="高知県">高知県</option> 41<option value="福岡県">福岡県</option> 42<option value="佐賀県">佐賀県</option> 43<option value="長崎県">長崎県</option> 44<option value="熊本県">熊本県</option> 45<option value="大分県">大分県</option> 46<option value="宮崎県">宮崎県</option> 47<option value="鹿児島県">鹿児島県</option> 48<option value="沖縄県">沖縄県</option></select> 49 </div>

試したこと

日本語化させるためのgem enum_helpをまだ入れていないからと思っていましたが値の取得に関することなので
保存に関しては関係ないように思えます

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

rails 6.0.0

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

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

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

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

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

m.ts10806

2021/05/14 10:55

そもそも、ブラウザに表示されたHTMLは想定通りのselectが出来上がっているのでしょうか。
risaiwata

2021/05/14 10:57

出来上がっています。検証ツールで確認しても都道府県がしっかり<option>で囲まれたHTMLとして表示されています。
m.ts10806

2021/05/14 11:01

valueにはちゃんと指定したコード(北海道なら1、東京なら13)になっているかどうかのほうが大事ですね。その値が送信されるので。 ただ、一部のHTMLとenumの定義だけでは何とも言えない部分もあるので、 なるべく他者がコピペで再現できる程度の粒度にしてもらえればと思います。 formタグやリクエストを受けつけるルーティング、 formタグに紐づいてるならモデルやコントローラもあったほうがいいです。
risaiwata

2021/05/14 11:07

binding.pryで値の取得を確認したいのですが、deviseを導入したときにどこにbinding.pry記述したら中身をみれるのかわかりません。(deviseはgemなので中身がまとまっているので) 複数ユーザーを導入するにあたって少し中身をいじっているので、app>controller>agents>registration_controller.rbの中にある def configure_sign_up_params devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute, :agentname, :agentname_kana, :first_name, :last_name, :first_name_kana, :last_name_kana, :prefecture_id, :address, :harbor, :how_to_go1, :how_to_go2, :tel1, :tel2, :homepage, :regular_holiday, :ice, :target, :ship_type_id, :fishing_type_id, :profile]) end にdevise_parameter_sanitizer.permitでbinding.pryをかけてみましたがその後取得した値はnilで返ってきたのでここではない気がします。
guest

回答2

0

自己解決

こちら無事自力で解決しました!
erbファイルのkeysの記述をそれぞれ取り除いたら保存できました。

投稿2021/05/14 12:29

risaiwata

総合スコア2

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

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

0

enumで定義されているカラムはprefectureでしょうかprefecture_idでしょうか
app>model>agent.rbにはprefectureですがconfigure_sign_up_paramsの記述は_idと異なるので、
enumの定義とdeviseの設定のずれでenumと認識されていないのかなあと思います

投稿2021/05/14 12:07

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

risaiwata

2021/05/14 12:32 編集

enumカラムはprefectureです。 enumで変数にする時にデータでのカラム名の_idを取り除いて記述しています。 こちら自己解決できました!回答誠にありがとうございます。
退会済みユーザー

退会済みユーザー

2021/05/14 13:41

良かったです!私も認識不足のようで申し訳ないです_(._.)_
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問