前提・実現したいこと
Railsアプリで、動画をお気に入りしてなんども見れる機能を作っています。
お気に入りの一覧を呼び出して、partialで呼び出したいのですが、
インスタンス作成で手こずっているので、詳しい方のお知恵を拝借したいです。
発生している問題・エラーメッセージ
①現在ログインしているユーザーのお気に入り一覧をとってくる
②お気に入り情報から取得した動画(chapter)のidを使用して、chapterを取得
③配列に入れてインスタンスに代入、ビューで使用する
④ビューではpartialで利用して繰り返し表示する
ruby
1class FavoritesController < ApplicationController 2 3 def index 4 @favorites = Favorite.where(user_id: current_user) 5 6 @chapters = [] 7 @favorites.each do |f| 8 @chapters << Chapter.where(id: f.chapter_id) 9 end 10 end 11 12end
上記のcontrollerで作成した@chapters
をコンソールで確認すると、下記のような値が入っていました。
console
1[#<ActiveRecord::Relation [#<Chapter id: 1, title: "ジャッキーチェン日本語吹き替えVer.石丸博也", kana: "じゃっきーちぇーんのにほんごふきかえばーじょんのいしまるひろやのこえ", start_time: 190, end_time: 255, created_at: "2020-02-06 05:10:18", updated_at: "2020-02-06 05:10:18", movie_id: 1>]>, #<ActiveRecord::Relation [#<Chapter id: 398, title: "セガサターンDの食卓のローラ", kana: "せがさたーんDのしょくたくのろーら", start_time: 1159, end_time: 1197, created_at: "2020-02-06 05:10:21", updated_at: "2020-02-06 05:10:21", movie_id: 25>]>]
これを読み込んだpartialではNoMethodError
が出ました。
なんか[]がダブってますね...これがわかりません
ちなみに下記のように、配列に入れるのではなく、@chapters
変数代入すると、エラーなく表示されます。
ruby
1class FavoritesController < ApplicationController 2 3 def index 4 @favorites = Favorite.where(user_id: current_user) 5 6 @favorites.each do |f| 7 @chapters = Chapter.where(id: f.chapter_id) 8 end 9 end 10 11end
しかしながら、eachでつど上書きされて1つのレコードしか入っていません。
partialとその先のファイルは問題ないが、controllerでの情報取得がうまくいってないようなので、
わかる方いたら教えていただきたいです!
ちなみに、partialのところの記述は下記のようになっています。
ruby
1= render partial: 'layouts/movie-box', collection: @chapters, as: 'chapter'
補足情報(FW/ツールのバージョンなど)
'rails', '~> 5.2.2', '>= 5.2.2.1'
'mysql2', '>= 0.4.4', '< 0.6.0'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/08 04:35
2020/02/08 10:39
2020/02/08 10:53