LoginSignup
0
0

More than 3 years have passed since last update.

ActiveRecord_RelationとCouldn't find Item without an IDのエラーについて

Posted at

まず、ActiveRecord_Relation:とは

例えばコントローラーで


def index
  User.all
end

と定義した場合
Use.allで持ってきたもののことを言います。
この時、allはレコードとカラムの情報のみを持ってきます。

Couldn't find Item without an IDとは

要約するとIDが取得できませんよ。という意味

例えばコントローラーで


def index
  User.find(params[:id])
end

と定義したとします。

この時paramsの[:id]の部分が取得できません。ということになります。

状況

  • このようなエラーが出る場合はどんな時か?

それはルーティングにネストをしていて、親になっているものから情報を取得しようとした場合である。

  • なぜか?

シークエルプロなどでテーブルを確認すれば一目瞭然。
子要素に親要素の情報は入っていないから。

この時、allはレコードとカラムからとってくるという記述の意味がわかります。

解決策

  • paramsの後に親要素となるidの指定をしよう


.find(params(:_id)

具体的には

親にusers,子にcommentsなんていうネストをしていた場合

commentsコントローラーに



@user = User.find(params(:user_id)

終わりに

このエラーの解決に結構時間がかかりましたが、解決してみれば単純なことでした。
まだまだ理解していないことが多いことがよくわかりました。
未熟故に間違ったことを記述している可能性や抜けていること、誤字脱字などがあるかもしれません。
初めての投稿ということで読みにくいが、それも少しずつ改善していければと思いつつ終了とさせていただきたいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0