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

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

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

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

Q&A

解決済

1回答

402閲覧

View画面でNoMethodErrorが出る

begenner

総合スコア79

Ruby on Rails

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

0グッド

0クリップ

投稿2018/01/21 09:33

編集2018/01/21 10:52

現在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>

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

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

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

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

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

guest

回答1

0

自己解決

d_vendorモデル名を削除しdvendorというモデル名で作成し同じようになおしたらできました。

アンダーバーはあまり使わない方がいいのかなと感じました。

投稿2018/01/21 12:31

begenner

総合スコア79

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問