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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

575閲覧

アソシエーション先のidがない場合のエラーについて

KOO_

総合スコア58

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2020/10/04 08:51

こんにちは。現在アソシエーションの設定を行なっております。

worker:listsで1:多の関係を構築しており、lists/showでworker.user_nameがある場合に表示させたいと考えております。

しかし、workersが存在しない場合、

undefined method `user_name' for nil:NilClass

のエラーが発生してしまい解決出来ずにいます。

references:workerを明記しており、modelで以下の設定も行なっております。

belongs_to :worker
has_many :lists

controller

1 2 def show 3 @list = List.find(params[:id]) 4 @q = List.ransack(params[:q]) 5 @lists = @q.result 6 @prev_list = @lists.where("lists.id < ?", @list.id).last 7 @next_list = @lists.where("lists.id > ?", @list.id).first 8 end 9 10private 11 def list_params 12 params.require(:list).permit( 13 :company, #会社名 14 )&.merge(worker: current_worker) 15 end

show

1 = @list.worker.user_name

上記プログラムで間違いがあるのでしょうか?
よろしくお願い致します。

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

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

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

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

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

hatsu

2020/10/04 11:31

worker.user_nameでエラーなのでworkerが存在しないと思われます。@listの中身をみてworker_idがあり、Workerテーブルにもそのidのデータがあることって確認できたりしますでしょうか
KOO_

2020/10/04 12:34

ありがとうございます。データベースを確認すると、listsにはuser_nameはありませんが、integer, "worker_id"があります。 またworkerにもuser_nameが確認出来ました。 よろしくお願い致します。
guest

回答1

0

ベストアンサー

Rails5ですから belongs_to :worker すると自動的に
実在するWorkerのworker_idの設定のvalidationが作成されます。
にも関わらずそういう事態になったとすると可能性は

  1. belogns_to を設定する前に作成した Listである
  2. DB に foreign_key の設定がなく、かつRailsを通さずにInsertしたListである(references:worker だから定義されてるかも、、)

で、それらは今後は発生しないので(Validationにかかるから)それらのデータを削除してください。

対症療法的には worker&.user_name という手もありますが。

投稿2020/10/04 23:00

winterboum

総合スコア23567

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問