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

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

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

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

4268閲覧

住所モデルに登録した都道府県IDを元に都道府県名をViewで表示したい

begenner

総合スコア79

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2018/01/08 12:37

現在ECサイトを作成しています
住所詳細の表示画面を作成していますが、うまく表示できません。
アソシエーションを組んでありますが

Viewで都道府県のidをもとに都道府県名を表示する方法がわかりません。

わかる方がいらっしゃればよろしくお願いします。
###エラー画面
エラー1(controller側)
イメージ説明

エラー2(View側)
イメージ説明
イメージ説明
###現在の構成
1.deviseを利用している
2.都道府県、住所の2つのモデル(prefecture、adress)がある
3.住所 N : 1 都道府県 のリレーションが組んである
4.住所モデルには1ユーザーにつき複数の住所がある(会社住所、配送住所用)
5.登録はできる(都道府県はprefectureモデルのidで登録する形になっている)
6.必要だと感じなかったため都道府県のcontrollerは作成していない(データは手打ちで入力しました)

###分からないこと
1.アソシエーションを組むだけでなく都道府県のcontrollerも必要なのか?
2.controllerを作成した場合ネストを利用した方がいいのか、しなくていいのか?

###実現したいこと
Viewで住所モデルに登録した都道府県IDを元にViewで都道府県名を表示したい
###動作環境
OS:mac
Ruby:2.3.5
Ruby on Rails: 4.2.5
###試したこと
@adressesを単数系の@adress に変更し
@adress = Adress.where(user_id: current_user.id).where(c_adress_flg: 1)
と変更して試しましたがうまくいきませんでした。

###該当のソースコード(抜粋)
データベース(schema.rb)

ruby

1ActiveRecord::Schema.define(version: 20180106142022) do 2#住所モデル(id, ユーザーid, 郵便番号, 都道府県ID, 市区郡, 詳細, 会社住所用フラグ, 配送用フラグ) 3 create_table "adresses", force: :cascade do |t| 4 t.integer "user_id", limit: 4 5 t.string "postal_code", limit: 255 6 t.integer "prefecture_id", limit: 4 7 t.string "city", limit: 255 8 t.string "street", limit: 255 9 t.string "others", limit: 255 10 t.integer "c_adress_flg", limit: 4 #会社住所フラグ 11 t.integer "s_adress_flg", limit: 4 #配送先住所フラグ 12 t.datetime "created_at", null: false 13 t.datetime "updated_at", null: false 14 end 15 16#都道府県モデル(id,都道府県名) 17 create_table "prefectures", force: :cascade do |t| 18 t.string "name", limit: 255 19 end 20 21 22end

routes.rb

ruby

1Rails.application.routes.draw do 2#住所コントローラー(都道府県controllerは作成していない) 3 resources :adresses 4 5 root to: 'tops#index' 6end 7

アソシエーション

ruby

1#app/models/prefectures.rb 2class Prefecture < ActiveRecord::Base 3 belongs_to :adress 4end 5 6#app/models/adress.rb 7class Adress < ActiveRecord::Base 8 belongs_to :user 9 has_many :prefectures 10end 11

controller部分

ruby

1#app/controllers/adresses_controller.rb 2 def index 3 @adresses = Adress.all.where(user_id: current_user.id) 4 #エラー1(NoMethodError) 5 # @prefectures = @adresses.prefectures 6 # ⇧⇧表示させるために上のコードを追加してみましたがエラーが発生します 7 end

View部分

ruby

1 <% @adresses.each do | adress | %> 2 <% if adress.c_adress_flg == 1 %> 3 <div class="border"> 4 <%= adress.postal_code %><br> 5     <!--エラー2(NoNameError)--> 6 <%= prefecture.adress.name %><br> 7     <!--⇧⇧⇧上記のコードを追加しましたがエラーが発生します--> 8 <%= adress.city %><%= adress.street %><br> 9 <%= adress.others %><br> 10 <%= link_to '変更する', edit_c_adress_path(adress.id) %> 11 </div> 12 <% end %> 13 <% end %>

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

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

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

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

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

guest

回答1

0

ベストアンサー

住所の英語は adress でなく address です。

それはともかく,Prefecture モデルのほうに

rb

1belongs_to :adress

があるのはおかしいですね。belong_to は相手先の id を示すカラムを持っているほうに記述するので,Adress のほうに

rb

1belongs_to :prefecture

を書きます。

こうしておくと,Adress のインスタンスで prefecture メソッドが使えます。
よって,ビューでは

erb

1<%= adress.prefecture.name %>

などと書けるわけです。

都道府県のcontrollerも必要なのか?

要らないでしょう。都道府県名は固定ですから。そもそもモデルにする必要すらなくて,都道府県コード(JIS X 0401)に都道府県名を対応させたハッシュを用意すれば十分ではないでしょうか。

追記

コントローラーのほうですが,User モデルに

rb

1has_many :addresses

があれば,index アクションのメソッドは

rb

1def index 2 @adresses = current_user.addresses 3end

と書けるはずです。

投稿2018/01/08 13:29

編集2018/01/08 13:33
scivola

総合スコア2108

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問