#困っていること
railsのテーブル結合で、モデルのhas_one,belongs_toアソシエーションとjoinsメソッドを使ってやろうとしているのですがなかなかうまくいきません。初心者なので用語の使い方で間違っている部分があるかもしれませんがご容赦ください。
#前回の質問からの修正
一度質問しているので、質問自体は一番下にコピペしてあります。
前回から修正して、selectの部分を追加しました。
a = Source.joins(:sentence).select("sources.*,sentences.*").where(id:1)
すると、以下のようなクエリが発行されます。このクエリはMySQL上であればテーブルが結合できることが確認できました。
SELECT sources.*,sentences.* FROM `sources` INNER JOIN `sentences` ON `sentences`.`source_id` = `sources`.`id` WHERE `sources`.`id` = 1 LIMIT 1
しかし、rails上で動かすとsourceテーブルのカラムのみしか代入されていません(sentenceのカラムがない)。ここからどうすればsentenceテーブルのカラムも使えるようになるのか分からないので、ご教授いただけると非常に助かります。
##試したこと
a.association
をすると、ArgumentError (wrong number of arguments (given 0, expected 1))
と返ってきました。2つのテーブルが関連づけられていないのでしょうか。
#以下、前回質問のコピー
閲覧ありがとうございます
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 | +----+---------+------------+--------+
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/29 03:09
2018/12/29 04:21