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

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

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

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

Model

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

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

Q&A

0回答

1570閲覧

【rails】enumを用いてユーザーの都道府県を登録した場合の都道府県別ユーザー表示について

risaiwata

総合スコア2

Ruby

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

Model

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

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

0グッド

1クリップ

投稿2021/05/21 12:17

前提・実現したいこと

オリジナルアプリ制作で、各都道府県のリンクを押すとその都道府県の番号を持つユーザー(agent)を表示させたいです。
都道府県はenumで管理してデータに保存しています。
どのようにすれば各都道府県のリンクが作れるかつどう表示させればいいかわからず困っています。
こちらを参考に自分でもやってみましたが、
理解が足りず合っているかもわかりません。

質問内容をまとめると
・enumで該当番号(北海道なら1)を持つユーザーだけ表示させることは可能か
・表示させるにはコントローラーにどのような記述が必要か
・ルーティングはどうなるか
・上記が解決したとして、都道府県分のページを作成する必要があるか

該当のソースコード

agents controller

ruby

1class AgentsController < ApplicationController 2 3 def index 4 @agents = Agent.all.order(created_at: :desc) 5 end 6 7 def show 8 @agent = Agent.find(params[:id]) 9 @blogs = @agent.blogs.page(params[:page]).per(4).order(created_at: :desc) 10 respond_to do |format| 11 format.html 12 format.js if request.xhr? 13 end 14 end 15 16 def edit 17 @agent = Agent.find(params[:id]) 18 end 19 20 def update 21 agent = Agent.find(params[:id]) 22 agent.update(agent_params) 23 if agent.save 24 flash[:notice] ="編集に成功しました" 25 redirect_to agent_path(agent.id) 26 else 27 render :edit 28 end 29 end 30 31 def pref_name_index 32 @agents = Agent.where(prefecture: params[:prefecture_id]) 33 @agent = Agent.find_by(prefecture: params[:prefecture_id]) 34 end 35 36 37 38 private 39 40def agent_params 41 params.require(:agent).permit(: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, :sheet) 42end 43 44end 45 46

Routes.rb

ruby

1Rails.application.routes.draw do 2 3 devise_for :anglers, controllers: { 4 sessions: 'anglers/sessions', 5 passwords: 'anglers/passwords', 6 registrations: 'anglers/registrations' 7 } 8 9 devise_for :agents, controllers: { 10 sessions: 'agents/sessions', 11 passwords: 'agents/passwords', 12 registrations: 'agents/registrations' 13 } 14 root 'top#index' 15 resources :agents, only: [:show,:edit,:update,:index] 16 resources :blogs, only: [:new, :create,:index, :show, :edit, :update, :destroy] 17 18 get 'agents/:prefecture/prefecture_id', to: 'agents#pref_name_index'

Agent model

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 mount_uploader :image, ImageUploader 9 10 enum prefecture: { 11 "--都道府県--":0,北海道:1,青森県:2,岩手県:3,宮城県:4,秋田県:5,山形県:6,福島県:7, 12 茨城県:8,栃木県:9,群馬県:10,埼玉県:11,千葉県:12,東京都:13,神奈川県:14, 13 新潟県:15,富山県:16,石川県:17,福井県:18,山梨県:19,長野県:20, 14 岐阜県:21,静岡県:22,愛知県:23,三重県:24, 15 滋賀県:25,京都府:26,大阪府:27,兵庫県:28,奈良県:29,和歌山県:30, 16 鳥取県:31,島根県:32,岡山県:33,広島県:34,山口県:35, 17 徳島県:36,香川県:37,愛媛県:38,高知県:39, 18 福岡県:40,佐賀県:41,長崎県:42,熊本県:43,大分県:44,宮崎県:45,鹿児島県:46,沖縄県:47 19 }, _prefix: true 20 21 enum ship_type: { 22 "--業種--":0, 23 乗合:1,仕立:2,渡船:3,筏・カセ:4,レンタルボート:5,その他:6 24 }, _prefix: true 25 26 enum fishing_type: { 27 "--釣り方--":0, 28 コマセ(撒き餌):1,サビキ:2,胴突き:3,活きエサ・泳がせ:4,天びん:5,五目釣り:6,磯釣り:7, 29 筏・カセ釣り:8,スッテ・ツノ:9,エギング:10,タイラバ:11, ひとつテンヤ:12,ジギング・キャスティング:13, 30 その他の釣り方:14 31 }, _prefix: true 32 33 with_options presence: true do 34 validates :agentname, format: { with:/\A[ぁ-んァ-ン一-龥々ー]+\z/} 35 validates :agentname_kana, format: { with: /\A[ァ-ヶー-]+\z/ } 36 validates :email, on: :create 37 VALID_PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i 38 validates :password, format: {with: VALID_PASSWORD_REGEX, message: "は英数字混合にしてください"}, on: :create 39 validates :first_name, format: { with:/\A[ぁ-んァ-ン一-龥々ー]+\z/} 40 validates :last_name, format: { with:/\A[ぁ-んァ-ン一-龥々ー]+\z/} 41 validates :first_name_kana, format: { with: /\A[ァ-ヶー-]+\z/ } 42 validates :last_name_kana, format: { with: /\A[ァ-ヶー-]+\z/ } 43 validates :prefecture_id, numericality: {other_than: 0, message: "can't be blank"} 44 validates :address 45 validates :harbor 46 validates :how_to_go1 47 validates :tel1, format: {with:/\A\d{10,11}\z/, message: '電話番号は11桁以内の数値のみ保存可能なこと'} 48 validates :regular_holiday 49 validates :ice 50 validates :target 51 validates :ship_type_id, numericality: {other_than: 0, message: "can't be blank"} 52 validates :fishing_type_id, numericality: {other_than: 0, message: "can't be blank"} 53 end 54 55 has_many :blogs 56 57end 58

ルーティング

Prefix Verb URI Pattern Controller#Action root GET / top#index agents GET /agents(.:format) agents#index edit_agent GET /agents/:id/edit(.:format) agents#edit agent GET /agents/:id(.:format) agents#show PATCH /agents/:id(.:format) agents#update PUT /agents/:id(.:format) agents#update blogs GET /blogs(.:format) blogs#index POST /blogs(.:format) blogs#create new_blog GET /blogs/new(.:format) blogs#new edit_blog GET /blogs/:id/edit(.:format) blogs#edit blog GET /blogs/:id(.:format) blogs#show PATCH /blogs/:id(.:format) blogs#update PUT /blogs/:id(.:format) blogs#update DELETE /blogs/:id(.:format) blogs#destroy GET /agents/:prefecture/prefecture_id(.:format) agents#pref_name_index

足りないものなどありましたらご指摘お願いいたします。よろしくお願いいたします。

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

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

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

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

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

K_3578

2021/05/22 00:58

本件にteratailタグが必要とは思えませんがどういった意図で付けたのでしょうか。 理由がないなら外して下さい。
winterboum

2021/05/22 09:30

enumでないのならわかるのですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問