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

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

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

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

Q&A

解決済

2回答

1630閲覧

railsのアソシエーションについて

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

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

0グッド

0クリップ

投稿2016/01/13 14:58

編集2016/01/13 14:59

categoriesテーブル
cntsテーブル

の二つを

belongs_to :category
has_many :cnts

としてアソシエーションを行いました。

cnts_controller.rbにて

def index
@cnt = Cnt.all
end

としてビューの

index.html.slimでは

@cnt.each do |cnt|
tr
td = cnt.id
td = cnt.category.id

としたのですが、td = cnt.category.idの部分でエラーが発生します。

ブロックを使用しない形ではエラーにならないため、そのあたりが原因かと思うのですが、どこが間違いになるのでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

もともとの
td = cnt.category.id
でデータが取得できました。

問題がソース部分にあったのではなく、テストデータベースにidの数値を1レコードのみですが入れ忘れていたためエラーが発生していたようです。
データを完全に入れると問題なく動作致しました。
データベースのデータが不十分であるとnilが返ってくると思い込んでいたのですが、エラーになることもあるようです。

ブロックを使用しない形でエラーが出なかったのは

def index
@cnt = Cnt.all
end

のようにレコード全てを取得する形ではなく

def index
@cnt = Cnt.find(1)
end

のような形で1レコードだけ取得していました。
結果として、未入力データレコードを取得することがなかったため、問題なく動作していたようです。

投稿2016/01/14 01:06

編集2016/01/14 01:13
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

td = cnt.category_id

categoryのidを出力するだけでよければ、これでいけると思いますがダメでしたか?

投稿2016/01/14 00:14

jinco

総合スコア432

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

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

退会済みユーザー

退会済みユーザー

2016/01/14 01:04

回答ありがとうございます。 もともとの td = cnt.category.id でデータが取得できました。 問題がソース部分にあったのではなく、テストデータベースにidの数値を1レコードのみですが入れ忘れていたためエラーが発生していたようです。 データを完全に入れると問題なく動作致しました。 しっかりと確認しておくべきでした。お手数おかけしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問