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

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

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

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

Ruby

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

Q&A

解決済

1回答

1551閲覧

プルダウンの情報(都道府県)を表示したい。

daichang

総合スコア13

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2019/02/13 11:59

前提・実現したいこと

環境:AWS Cloud 9
Ruby on Rails 5.2.2

フォームで都道府県をプルダウンで選択し、その都道府県名を下記のPrefectureという場所に表示させたいです。
イメージ説明
イメージ説明

発生している問題

現在フォームからプルダウンで選択した都道府県名を、上記のPrefectureというところに表示させようとしています。
しかし、表示される文字は岩手県という都道府県名ではなくPrefectureという文字が出てきてしまいます。
これをどのように岩手県という都道府県名を表示させるかを教えていただきたいです。

該当のソースコード

将来的に、都道府県名からUserを特定できるようにしたいのでUserPrefectureは多対多の関係です。
下記現状のコードです。

user_prefecture_relation.rb

class UserPrefectureRelation < ApplicationRecord belongs_to :user belongs_to :prefecture end

user.rb

class User < ApplicationRecord has_many :user_prefecture_relations, dependent: :destroy has_many :prefecture, through: :user_prefecture_relations end

prefecture.rb

class Prefecture < ApplicationRecord has_many :user_prefecture_relations, dependent: :destroy has_many :users, dependent: :destroy end

下記のGemを使用

Gem 'seed_fu'

db/fixtures/prefecture.rb

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

users_controller.rb

def update @user = User.find(params[:id]) if @user.update(user_params) flash[:success] = "転職希望者情報を更新しました" redirect_to @user else flash.now[:danger] = "転職希望者情報を更新できませんでした" render :edit end end private def user_params params.require(:user).permit(:name, :prefecture_id) end

edit.html.erb

<%= form_for(@user) do |f| %> <div class="form-group"> <%= f.label :address, "住所" %><br> <%= f.collection_select :prefecture_id, Prefecture.all, :id, :name, include_blank: '選択して下さい' %> <%= f.text_field :address, class: "form-control" %> </div> <%= f.submit '投稿', class: "btn btn-outline-primary" %> <% end %>

show.html.erb

<h2 class="card-title"><%= @user.name %> | <%= @user.age %>歳 | <%= @user.prefecture.name if @user.prefecture_id? %></h2>

試したこと

下記サイトを参考にしました。
宜しくお願い致します。

【Rails】has_many – belongs_toで都道府県データを持てるようにする

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

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

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

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

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

guest

回答1

0

ベストアンサー

ユーザーと都道府県が多対多になっているのは、一人のユーザーが複数の都道府県と紐づくということでしょうか?
紐づく都道府県が1つだけであれば、中間テーブルを設けずに参考サイトのとおりにすれば大丈夫と思います。
(フォームの画像を見る限り、多対多である必要がなさそうでしたので。)

多対多で進める必要があるのであれば、まず、user.rb

has_many :prefecture, through: :user_prefecture_relations

を、

has_many :prefectures, through: :user_prefecture_relations

にしましょう。
そのままでも動くといえば動きますが、複数形にしないと今後混乱を招くと思いますので。

問題の直接の原因となっているのは、show.html.erb@user.prefecture.nameと思われます。
@user.prefecture(上記修正後は@user.prefectures)は複数のデータを持つActiveRecordまわりの何かしらのクラスになっているはずなので、これに.nameをつけることでクラス名(Prefecture)が返ってきているはずです。
解決策はどうしたいかにもよりますが、とりあえず@user.prefectures.pluck(:name)としてみれば紐付いている全県の名前が出てくるのではないかと思います。

投稿2019/02/15 01:16

Kta-M

総合スコア456

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

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

daichang

2019/02/15 02:16

Kta-Mさん ご回答いただきありがとうございます! そもそも、都道府県とユーザが多対多である必要がなかったです。。 参考サイトの通りやったら、できました! また、`@user.prefectures.pluck(:name)`で表示することもできたので、こちらは今後に活かせるように覚えておきます! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問