現在ECサイトを作成しています。
APIのリンクを利用して配送状況の確認のリンクを表示したいのですが、
リレーション関係でのエラーが原因だと思いますが、エラーがでて表示できません。
わかる方がいらっしゃればよろしくお願いします。
###エラー内容
undefined method `for_api_name' for nil:NilClass
###期待する動作
配送状況の確認のリンクを表示、機能させたい(別タブを開き確認できる)
###動作環境
OS:mac
Ruby:2.3.5
Ruby on Rails: 4.2.5
MySQL: 5.7.18
###参考サイト
宅配便の配達状況 API
###試したこと
<%= order.d_vendor.name %>
を
<%= d_vendor.order.name %>
に変更してもダメでした
###補足情報
###該当のソースコード
db/schema.rb
ruby
1 create_table "d_vendors", force: :cascade do |t| 2 t.string "name", limit: 255#配送業者名 3 t.string "for_api_name", limit: 255#API用リンク 4 end 5 6 create_table "orders", force: :cascade do |t| 7 t.string "order_no", limit: 255#注文番号 8 t.integer "user_id", limit: 4#ユーザーID 9 t.integer "d_vendor_id", limit: 4 10 t.string "d_number", limit: 255 11 t.datetime "created_at", null: false 12 t.datetime "updated_at", null: false 13 end
config/routes.rb
ruby
1 resources :orders do 2 resources :d_vendors 3 end
リレーション
ruby
1#注文 2#app/models/order.rb 3class Order < ActiveRecord::Base 4 belongs_to :user 5 belongs_to :d_vendor 6end 7 8#配送業者 9#app/models/d_vendor.rb 10class DVendor < ActiveRecord::Base 11 has_many :orders 12end
app/controllers/orders_controllers.rb
ruby
1class OrdersController < ApplicationController 2 def index 3 @orders = Order.includes(:d_vendors).all.reverse_order 4 end 5end
app/views/orders/index.html.erb
ruby
1<table border="1"> 2 3 <thead> 4 <tr> 5 <th>配達会社</th> 6 <th>配達業者<br>問い合わせ番号</th> 7 </tr> 8 </thead> 9 <tbody> 10 <% @orders.each do |order| %> 11 <tr> 12 <%= order.d_vendor.name %><!--配送会社--> 13 <td><%= link_to '確認', "http://thira.plavox.info/transport/api/?t=#{order.d_vendor.for_api_name}&no=#{order.d_number}", target: "_blank" %></td><!--配送状況--> 14 <% end %> 15 </tr> 16 <% end %> 17 </tbody> 18</table>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。