私は1対多の関係で2つのテーブル(件名とページ)を持っています。私は主題からの基準をSQLの構文解析に加えてページに追加したいが、進捗状況は非常に遅く、しばしば問題に陥っている。私は真新しいレールで、助けてください。私は主題を知っていないことを考えるとRuby on Rails - 2つのテーブルを結合するには?
id name subject_id
-- -------------------- ----------
2 Addition 1
4 Subtraction 1
5 Simple Multiplication 6
6 Simple Division 6
7 Hard Multiplication 6
8 Hard Division 6
9 Elementary Divsion 1
:の下、ページに記載されている列を
id name level
1 'Math' 1
6 'Math' 2
...
サンプルデータ:被験者で
class Subject < ActiveRecord::Base
has_many :pages
end
class Page < ActiveRecord::Base
belongs_to :subject
end
サンプルデータは、以下の3つの列がリストされています。 ID、私は主語の名前とレベル、およびページ名しか知りません。ここで私は(同じ結果を達成するであろうことか、似たような)を生成するSQLは、次のとおりです。
select subjects.id, subjects.name, pages.id, pages.name from subjects, pages
where subjects.id = pages.subject_id
and subjects.name = 'Math'
and subjects.level = '2'
and pages.name like '%Division' ;
私は結果に2列を得ることを期待:
subjects.id subjects.name pages.id pages.name
----------- ------------- -------- -----------
6 Math 6 Simple Division
6 Math 8 Hard Division
は、これは非常に単純なSQLですしかし、私は欲しいものを手に入れられませんでした。
Here is my rails console:
>> subject = Subject.where(:name => 'Math', :level => 2)
Subject Load (0.4ms) SELECT `subjects`.* FROM `subjects` WHERE `subjects`.`name` = 'Math' AND `subjects`.`level` = 2
[#<Subject id: 6, name: "Math", position: 1, visible: true, created_at: "2011-12-17 04:25:54", updated_at: "2011-12-17 04:25:54", level: 2>]
>>
>> subject.joins(:pages).where(['pages.name LIKE ?', '%Division'])
Subject Load (4.2ms) SELECT `subjects`.* FROM `subjects` INNER JOIN `pages` ON `pages`.`subject_id` = `subjects`.`id` WHERE `subjects`.`name` = 'Math' AND `subjects`.`level` = 2 AND (pages.name LIKE '%Division')
[#<Subject id: 6, name: "Math", position: 1, visible: true, created_at: "2011-12-17 04:25:54", updated_at: "2011-12-17 04:25:54", level: 2>, #<Subject id: 6, name: "Math", position: 1, visible: true, created_at: "2011-12-17 04:25:54", updated_at: "2011-12-17 04:25:54", level: 2>]
>>
>> subject.to_sql
"SELECT `subjects`.* FROM `subjects` WHERE `subjects`.`name` = 'Math' AND `subjects`.`level` = 2"
>> subject.size
1
>> subject.class
ActiveRecord::Relation
第一の文:件名= Subject.where(:名=> '数学'、:レベル=> 2) 第二の文:subject.joins(:ページ).where([ 'ページ.nameのLIKE「、 '%部門'])
質問:?チェーンSQLは実際に2つの行を返すの
- 結果が、subject.sizeはわずか1言いますか?
- ページの列を返すように指示するにはどうすればよいですか?
- なぜsubject.to_sqlにはsql from文1のみが表示されるのですが、なぜそれが文2の連鎖SQLを含まないのですか?
- 本質的に、上記のようにSQLを解析する(または同じ結果を得る)ためには、文を別に書く必要がありますか?
多くのありがとう。
華麗な!!!どうもありがとうございます。あなたは私のすべての質問に答える、今はうまくいく。 :-) – jmsia