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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Active Record

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

Q&A

解決済

1回答

347閲覧

DBを結合したいのですが...

octo11

総合スコア15

Ruby on Rails 5

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Active Record

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

0グッド

1クリップ

投稿2018/12/25 03:03

閲覧ありがとうございます
Railsフレームワークを使ってアプリ製作中なのですが、DBの結合で詰まってしまったので質問させてください。

#質問
sourcesテーブルとsentencesテーブルを結合したいと思い、joinsを使ってみましたが、sourceのカラムしか変数に代入されていないようです。どのようにすれば、うまく結合できるのでしょうか。
#コード
[rails console上]

a = Source.joins(:sentence).where(id:1)

[結果]

Source Load (1.2ms) SELECT `sources`.* FROM `sources` INNER JOIN `sentences` ON `sentences`.`source_id` = `sources`.`id` WHERE `sources`.`id` = 1 LIMIT 11 => #<ActiveRecord::Relation [#<Source id: 1, type_id: 1, main_title: "piyopiyop", author: "gehog">]>

[models/sentence.rb]

class Sentence < ApplicationRecord belongs_to :source end

[models/source.rb]

class Source < ApplicationRecord has_one :sentence end

#データベース

[sentences table]

+----+---------+-----------+---------------+ | id | user_id | source_id | sentence | +----+---------+-----------+---------------+ | 1 | 1 | 1 | hogehogehoge | | 2 | 2 | 2 | 2hogehogehoge | +----+---------+-----------+---------------+

[sources table]

+----+---------+------------+--------+ | id | type_id | main_title | author | +----+---------+------------+--------+ | 1 | 1 | piyopiyop | gehog | | 2 | 2 | piyopiyopi | gehoge | +----+---------+------------+--------+

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

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

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

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

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

guest

回答1

0

ベストアンサー

SQLの部分だけ、

sourceのカラムしか変数に代入されていないようです。

sourceのカラムしかSELECT の並びに記述していないからです。

SQL

1SELECT `sources`.* FROM `sources` INNER JOIN `sentences` ... 23SELECT `sources`.*, `sentences.* FROM `sources` INNER JOIN `sentences` ...

同じSQLでもデータベースによって方言が大きいですから、どのデータベースを使うのかを質問のタグで明示したり、バージョンも明記した方が適切なコメントが付き易いです。 SQLの観点から Oracle Database, PostgreSQL, MySQL の特徴を整理しよう!

投稿2018/12/25 03:55

Orlofsky

総合スコア16415

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

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

octo11

2018/12/25 04:23

そういうことでしたか! ご丁寧にありがとうございます。助かりました
octo11

2018/12/26 14:31

解決済みにした後に恐縮なのですが SELECT sources.*,sentences.* FROM `sources` INNER JOIN `sentences` ON `sentences`.`source_id` = `sources`.`id` WHERE `sentences`.`id` = 1 のようにしたのですが、解決しませんでした。何かわかるところがあればご教授いただけませんか。 MySQLです。
octo11

2018/12/27 13:47

このクエリは、MySQL上では動いているようなのでrails側の問題のようでした。改めて質問してみようと思います。お騒がせいたしました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問