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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

2100閲覧

railsでModule.カラム名がなぜかNilClass扱いされる

you88

総合スコア147

Ruby

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

Ruby on Rails

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

1グッド

0クリップ

投稿2017/12/23 08:10

編集2017/12/23 10:31

railsで

https://qiita.com/Vit-Symty/items/1f85707eedc07bb996c8

この記事の

.name : カラム名

のようにModule.カラム名で特定のカラムの値を取ってきたいんですがなぜかNilClassと言われてしまう。。。

イメージ説明

<% @posts.each do |post| @genders = { 1 => "男",2 => "女",3 => "その他" } # tag @tag_map_id = TagMap.find_by(post_id: post.id) @tag_list = Tag.find_by(id: @tag_map_id.tag_id).name.split(",") %> <a href="loop-loop.net/posts/<%= post.id %>"> <div class="panel panel_index panel-success"> <div class="panel-heading panel_title"> <%= link_to(post.title,"/posts/#{post.id}") %> </div> <div class="panel-body"> <div class="row"> <div class="col-xs-12"> <%= post.description %> </div> </div> <div class="row"> <div class="col-xs-12"> <%= @tag_list %> </div> </div> </div> <div class="panel-footer row"> <div class="col-xs-6"> <%= post.line_id %> </div> <div class="col-xs-4"> <%= post.location %> </div> <div class="col-xs-2"> <%= @genders[post.gender] %> </div> </div><!--panel-footer--> </div> </a> <% end %> <%= paginate @posts %>
退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

undefined method `tag_id` for nil:NilClass

といっているのですから,@tag_map_id が nil なのですよね。

@tag_map_idTagMap.find_by(...) で得ています。
find_bynil を返すのは,当該のレコードが見つからなかったとき。
つまり,post_idpost.id であるような TagMap は無い,ということでしょう。

投稿2017/12/23 08:19

scivola

総合スコア2108

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

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

you88

2017/12/23 10:33

なるほど!nilclassをclassが定義できていないものと勘違いしていたのですが、classの中身が無いという意味だったんですね。ありがとうございます。 ただなぜこれがからなのか分からず。。。 post.idに数字を入れたときは動いたためおそらくpost.idがうまく値を取れていないんだと思うのですがなぜか分からず。。。ちょっと全文を追記してみたので教えてもらえると助かります。すみません!
scivola

2017/12/23 11:09

エラーメッセージに出てくる nil:NilClass は,「NilClass というクラスのインスタンスであるところの nil」という意味です。 そして,undefined method `XXX` for YYY は,「YYY に XXX なんてメソッド定義されてないけど?」という意味です。 ためしに 3.hoge ってやると, NoMethodError: undefined method `hoge' for 3:Integer って出ます。 いろんなオブジェクトでやってみてください。
scivola

2017/12/23 16:49

で,どうして `TagMap.find_by(post_id: post.id)` で見つからないのかは,おそらくこのビューのコードがおかしいのではなく,そういうデータだからでしょう。 `@posts` の各要素の `id` の値を調べてみて,それに対応する `TagMap` が存在するかをデータベース上で確かめてみられては。 モデルやコントローラーのバグのためにデータがおかしいのかもしれませんし,現在のモデル,コントローラーは正しいけれども,開発の途上で生成されたレコードがおかしいのかもしれません。後者の場合はいったんデータベースを空にしてやり直せば問題は解消されるでしょう。 なお,コードの途中の変数や式の値を知るには byebug が便利です。Qiita でも Rails で byebug を使う記事があるので,ご参考にどうぞ。
you88

2017/12/24 01:34

ありがとうございます!DBに空のデータがありました!nilのときはif文で避けるようにしたら通りました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問