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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

1回答

5850閲覧

Active Record Rails 複数テーブルから値を取得する

Takuyamatsumot6

総合スコア19

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

1クリップ

投稿2015/01/07 11:33

こんにちは。現在Railsを用いて小さなSNSを練習で作成しています。
このサイトはユーザがいくつかの写真から成るアルバムをアップロード出来たり、アルバムに対して「いいね!」が出来たりするような形になっています。

そこでユーザのタイムラインに表示する為のデータを取得したいのですが、少し躓いているので、助けて頂けると嬉しいです。

テーブル構造は以下のようになっています。

lang

1Albumsテーブル id, user_id, name, created_at, updated_at 2Likesテーブル id, user_id, album_id, created_at, updated_at 3 4user_idはアルバムをアップロードしたユーザのid, 「いいね!」をしたユーザのidとなっています。

この二つのテーブルから取得したいデータははフォローしているユーザがアップロードしたアルバムと、彼らが他のユーザのアルバムを「いいね」した情報です。現在これらのデータは下記のように取得しています。

lang

1def self.timeline(following_ids) 2 albums = Album.where(user_id: following_ids).includes(:uploaded_pictures).includes(:user) 3 likes = Like.where(user_id: following_ids).includes(:user).includes(album: :user) 4 return albums.concat(likes).sort_by{|content| content.created_at}.reverse 5end

ここで質問があります。二つのテーブルを合わせてこれと同じデータを下記のように一行でorder(:created_at)で取得する事は可能でしょうか?一行で取得しなければいけない理由としては、OffsetとLimitを用いてタイムライン上で、ある一定の量を表示し、"もっと見る"を設けたいからです。二つのテーブルからバラバラにデータを取得した場合created_at順にOffsetがうまく働かなくなってしまいます。

lang

1このような感じです 2 * from Album and Like where user_id: following_ids order by created_at offset num limit num

ここで躓き、解決策が見つからず次に進めない状態になっています。
質問の意味が分かりにくいかもしれませんが、分かる方いらっしゃいましたら、回答お願い致します。

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

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

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

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

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

guest

回答1

0

完璧ではないかもしれませんが自分なりに考え、下記のように、いいねとアルバム情報を持つテーブルを新しく作る事で一時的に解決する事が出来ました。

Events テーブル like_id album_id user_id created_at

このテーブルに Event.where(user_id: [following_user_ids]).includes(:like, :album).order(”created_at").offset(num).limit(num)のようにしました。

投稿2015/01/17 14:58

Takuyamatsumot6

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問