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

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

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

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

Ruby on Rails

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

Q&A

1回答

693閲覧

【rails】アクティブハッシュで設定した都道府県を使用するとNoMethodErrorとなる

kaori_oka

総合スコア176

Devise

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/01/14 04:56

前提・実現したいこと

railsにて通販サイトを開発しています。
deviseを使用してユーザーの新規登録を行なっているのですが、
その中のと都道府県の項目をgem 'active_hash'にて管理してます。

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

NoMethodError in Devise::Registrations#new

エラー画面

アクティブハッシュと、Deviseカスタマイズの記事を参考に、
メソッドを追記してみたのですが、NoMethodErrorとなります。

該当のソースコード

▼/app/views/devise/registrations/new.html.haml

haml

1.wrapper 2 = render 'layouts/header' 3 .content_wrapper 4 %h2 Sign up 5 = form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| 6 = render "devise/shared/error_messages", resource: resource 7~ 他の入力項目省略 ~ 8 .field 9 = f.label :prefectures_id 10 %br/ 11 = f.select :prefecture_id, Prefecture.all, :id, :name

▼/app/controllers/users/registrations_controller.rb

ruby

1# frozen_string_literal: true 2 3class Users::RegistrationsController < Devise::RegistrationsController 4 # before_action :configure_sign_up_params, only: [:create] 5 # before_action :configure_account_update_params, only: [:update] 6 7 # GET /resource/sign_up 8 def new 9 super 10 @prefecture = Address.where('prefecture_id IN(?)', params[:prefecture_id]) 11 @users << @prefecture.id 12 end 13 14~ 以下省略 ~ 15end 16

▼/app/models/prefecture.rb

ruby

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

▼/app/models/user.rb

ruby

1class User < ApplicationRecord 2 extend ActiveHash::Associations::ActiveRecordExtensions 3 belongs_to_active_hash :prefecture 4~ 以下省略 ~

参考記事

下記を参考に実装してみました!

Railsのgem 'active_hash'で都道府県データを作成してみた
deviseから複数モデルへの保存

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

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

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

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

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

guest

回答1

0

devise や ActiveHash はあんまり関係なくて、単に f.select の使い方を間違えているだけに見えます。
以下の書き方を試してみてください。

haml

1= f.select :prefecture_id, Prefecture.all.map { |pre| [pre.name, pre.id] }

一応、公式のAPIドキュメントを置いておくので、また余裕のある時に読んでみてください。
ActionView::Helpers::FormBuilder#select - Ruby on Rails API

投稿2020/01/15 06:21

編集2020/01/15 06:23
shinoharat

総合スコア1676

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問