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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

671閲覧

【Rails】お気に入りの情報を呼び出して一覧にしたい

kaori_oka

総合スコア176

Ruby on Rails

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/02/07 13:59

前提・実現したいこと

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'

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

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

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

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

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

guest

回答1

0

ベストアンサー

SQLを一気に書いてしまう方法ではいかがでしょうか?

Ruby

1def index 2 @chapters = Chapter.where(id: chapter_id = Favorite.where(user_id: current_user.id).select(:chapter_id)) 3end

ご存知かもしれませんが、scopeで書いた場合コントローラーがすっきりしますよ。

Ruby

1def index 2 @chapters = Chapter.search_chapters(current_user) 3end

ruby

1Chapterモデルに以下を追加 2scope :search_chapters, -> (current_user) { where(id: chapter_id = Favorite.where(user_id: current_user.id).select(:chapter_id)) }

投稿2020/02/07 18:40

amedama

総合スコア37

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

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

kaori_oka

2020/02/08 04:35

ありがとうございます! まとめて書くタイプと、scopeもどちらでもできました! scope知らなかったので、コントローラスッキリできてよかったです! ありがとうございます!
amedama

2020/02/08 10:39

役に立てて嬉しいです! ベストアンサーありがとうございました。 私も勉強中の身です。お互いスキルが上達していければいいですね!
kaori_oka

2020/02/08 10:53

すごく助かりました! railsのSQL文がわからない時、どうやって検索すればいいかわからないことが多いので、 教えていただけてよかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問