前提
帳票の在庫管理用アプリを作成しようとしています。
DBに保存した情報を表示する際に、関連づけした情報が呼び出せません。
【親テーブル】
名前:details
帳票の仕様(印刷期日などの)情報が入力されている。
【子テーブル】
名前:reports
帳票の情報が入力されている。
【エラー】
undefined method `deadline' for nil:NilClass
実現したいこと
親テーブルの情報を子テーブルの情報と共に表示したい。
該当のソースコード
1.ビュー
index.html.erb
1 <div> 2 <% @reports.each do |report| %> 3 <%= render partial: "reportlist",locals: { report: report } %> 4 <% end %> 5 </div>
_reportlist.html.erb
1<p><%= report.product %></p> 2<p><%= report.detail.deadline %></p>
2.コントローラー
stockscontroller.rb
1class StocksController < ApplicationController 2 def index 3 @reports = Report.includes(:detail) 4 end 5end
3.モデル
detail.rb
1class Detail < ApplicationRecord 2 has_many :reports 3end
report.rb
1class Report < ApplicationRecord 2 belongs_to :detail 3end
4.マイグレーションファイル
ruby
1class CreateDetails < ActiveRecord::Migration[6.0] 2 def change 3 create_table :details do |t| 4 t.string :type, null: false 5 t.integer :deadline 6 t.timestamps 7 end 8 end 9end
ruby
1class CreateReports < ActiveRecord::Migration[6.0] 2 def change 3 create_table :reports do |t| 4 t.string :product 5 t.references :details , null: false, foreign_key: true 6 t.timestamps 7 end 8 end 9end
試したこと
SequelProのテーブルを確認すると、reportsテーブルのdatails_idはdetailsに関連づいていました。
ターミナルを確認するとNULLが出ています。
Terminal
1 Detail Load (0.1ms) SELECT `details`.* FROM `details` WHERE `details`.`id` = NULL
ビューを以下のみにすると思った通りの表示を行ってくれます。
_reportlist.html.erb
1<p><%= report.product %></p>
以上のことから、DBは関連づいてはいるものの、@reportsでdetailの情報が取得できていないということかと予想するのですが、その原因がわかりません。
検証の方法や、そもそも初歩的な間違いがありますでしょうか?
ご教示いただけますと幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2022/09/22 04:28