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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Ruby on Rails

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

Active Record

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

Q&A

解決済

1回答

2515閲覧

RailsのActiveRecordで3つのテーブルを結合するやり方を教えてください

hirotto57

総合スコア57

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Ruby on Rails

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

Active Record

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

0グッド

1クリップ

投稿2016/03/13 10:50

編集2016/03/13 11:37

RailsのActiveRecordで3つのテーブルを結合するやり方を教えてください。

やりたい事
eager_loadやjoinを用いて下記3つのモデル(テーブル)から全ての値を取得し、ビューのeachメソッドで使用したいです。

question.rb
has_many :categories
has_many :languages

category.rb
belongs_to :question

language.rb
belongs_to :question

テーブル
questionsテーブルのカラム
id、title、content

categoriesテーブルのカラム
id、category_name、question_id(外部キー)

languageテーブルのカラム
id、language_name、question_id(外部キー)

ビュー(イメージ)
<% @all_models.each do |all_model| %>
<%= all_model.title %>
<%= all_model.content %>
<%= all_model.category_name %>
<%= all_model.language_name %>
<% end %>

当方、Railsの初心者です。
何卒宜しくお願い致します。

追記
question.rb
has_many :categories, dependent: :destroy
accepts_nested_attributes_for :categories

has_many :languages, dependent: :destroy
accepts_nested_attributes_for :languages

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

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

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

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

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

lib

2016/03/13 11:15

過去の質問を拝見するに、だいぶ熟練されているようですねでは、2つ(questions,categories)のテーブルではどのようにイメージされていますか?その内容を補足として追記していただけますと回答がでやすいです。
hirotto57

2016/03/13 11:26 編集

コメント頂きありがとうございます。questions、categoriesのテーブルについてはquestion_id(外部キー)を使用して、ビューでcategory_nameを表示させたいです。ビューでは、fields_forを用いてformの入力の際に別々のモデルに値を登録するようにしています。モデルにはaccepts_nested_attributes_forを使用しています。 question.rb has_many :categories, dependent: :destroy accepts_nested_attributes_for :categories has_many :languages, dependent: :destroy accepts_nested_attributes_for :languages
guest

回答1

0

ベストアンサー

下記でLEFT JOINしてくれるようです。

ruby

1questions.includes(:categories, :language)

参考URLによると、下記の2つはイコールのようなので、questions.id = categories.question_idと同等のjoinになるのではないでしょうか?

sql

1SELECT `posts`.* 2FROM `posts` 3LEFT JOIN `blogs` ON `blogs`.`id` = `posts`.`blog_id` 4LEFT JOIN `users` ON `users`.`id` = `posts`.`user_id`

sql

1Post.includes(:blog, :user)

Railsで生SQLを書かずにLEFT JOINする方法

投稿2016/03/14 04:45

編集2016/03/14 04:46
KaiShoya

総合スコア551

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

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

hirotto57

2016/03/27 07:11

遅くなり申し訳ありません。 無事、解決することができました。 ご回答頂きありがとうございましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問