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