Ruby on Rails - How zum verknüpfen von zwei Tabellen?

Habe ich zwei Tabellen (Patienten und Seiten) in eins-zu-viele-Beziehungen. Ich möchte hinzufügen Kriterien von Personen, als auch Seiten zu Parsen eines sql, aber die Fortschritte waren sehr langsam und öfters mal in Probleme laufen. Ich bin ganz neu in rails, bitte um Hilfe.

class Subject < ActiveRecord::Base
  has_many :pages
end

class Page < ActiveRecord::Base
  belongs_to :subject 
end

Beispieldaten in den Fächern, aufgeführt drei Spalten unten:

id  name    level
1   'Math'  1
6   'Math'  2
...

Sample-Daten in Seiten, Spalten aufgeführt unter:

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

Gegeben, ich weiß nicht das Thema.id, ich weiss nur das Thema Namen und level, und name der Seite. Hier ist die sql, die ich erzeugen will (oder etwas ähnliches, das würde das gleiche Ergebnis zu erzielen):

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'  ;

Ich erwarten, um zwei Zeilen in das Ergebnis:

subjects.id     subjects.name   pages.id    pages.name 
-----------     -------------   --------    -----------
6               Math            6           Simple Division
6               Math            8           Hard Division

Dies ist eine sehr einfache sql, aber ich habe nicht in der Lage zu bekommen, wollte ich in rails.

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

1. Erklärung: subject = Betreff.where(:name => 'Mathematik', :level => 2)
2. Aussage: Thema.joins(:pages).where(['Seiten.Namen WIE ?', '%Division'])

Fragen:

  1. der Ergebnisse der verketteten sql wirklich gibt zwei Zeilen, aber Thema.die Größe sagt nur 1?
  2. Wie sage ich es zurückgeben Spalten von :Seiten?
  3. Warum unterliegen.to_sql zeigt immer noch die sql-Anweisung 1 nur, warum hat es nicht die verkettete sql-Anweisung 2?
  4. Im wesentlichen, was brauche ich, um schreiben Sie die Aussagen anders zu analysieren, die sql, wie oben aufgeführt (oder das gleiche Ergebnis zu erzielen)?

Vielen Dank.

InformationsquelleAutor jmsia | 2011-12-19

Schreibe einen Kommentar