現在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 %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。