前提・実現したいこと
前提
ご覧いただきありがとうございます。現在、railsで車メーカーとそれに紐づく車種のそれぞれテーブルを用意しています。
CarmakersテーブルとCarsテーブルは1対多のリレーションになっています。
Carmakersテーブルでは、maker(車メーカー名)というカラムが存在しています。
Carsテーブルでは、car_type(車種名)、carmaker_idというカラムが存在しています。
実現したいこと
- Carmaker/index(車メーカーの一覧ページ)において、それぞれの車メーカーに紐づいた車種名の中で、直近に登録された車種のみを表示させたいです。
わかっていること
- carmaker.carsという記述で車メーカーに紐づく全ての車種の情報は取得できる
- それをeach文で展開してcar.car_typeとすると、車メーカーに紐づく全ての車種名が表示できる
発生している問題・エラーメッセージ
まず、上記のeach文での展開後にcar.lastと、最後のレコードのみを取得したいという意味で記述すると、no method error 'last'とエラーが出る。(これに関してはcarが配列ではないのでlastというメソッドは適用できないという記事を見つけることはできました)
次に、carmaker.cars.lastと、車メーカーに紐づく全ての車種の最後のレコードという意味で記述すると、#Car:0x00007f8229c7f3a0というようにレコードの情報全てが表示されます。
そこで、carmaker.cars.last.car_typeと、そのレコードの中のcar_typeというカラムの情報のみを表示させたいという意味で記述すると、下記のエラーが表示されます。(下記コードのhtmlでの最終行)
NoMethodError in Carmakers#index undefined method `car_type' for nil:NilClass
該当のソースコード
ruby
1.container 2 .row.row-cols-1.row-cols-md-1 3 - @carmakers.each do |carmaker| 4 .col-md-3 5 .card 6 = image_tag "#{carmaker.image}", class: "card-img-top", size: '320x400' 7 .card-body.text-white.bg-dark 8 %h3.card-title 9 = link_to carmaker.maker, carmaker_path(carmaker), class: "card-title-title" 10 %p.card-text 11 = carmaker.explanation 12 .card-footer.text-white.bg-dark 13 %p.card-createdat 14 = carmaker.cars.last.car_type
ruby
1 2class CarmakersController < ApplicationController 3 def index 4 @carmakers = Carmaker.includes(:cars) 5 end 6
試したこと
- 該当レコード一つを取得することはできる
- 該当カラムの一覧表示はすることができる
- しかしながら、該当レコードの特定のカラム(今回ではcar_type)の一つ(今回では直近に登録された、つまり最新のcreated_at)表示させることができない
拙い文章でわかりにくいところもあるかと思いますがぜひご教授のほどよろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
rails5.2.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/10 23:56
2020/05/11 12:58
2020/05/11 13:21
2020/05/11 20:36
2020/05/12 00:31
2020/05/12 02:21 編集
2020/05/12 02:32