Как мне сделать запрос соединения в рельсах? - PullRequest
4 голосов
/ 03 декабря 2008

Скажем, у меня есть две таблицы, основной список студентов, содержащий личную информацию, и список зачислений студентов в классы. Две таблицы имеют общий столбец, который представляет собой строку, однозначно идентифицирующую студента, но не является первичным ключом.

Скажем, я хочу отобразить все записи на странице вместе с некоторыми личными данными ученика (скажем, возможно, из родного города).

Я понимаю, что это были бы отношения has_many. В основной записи есть много зачислений. Зачисление принадлежит студенту.

class Student < ActiveRecord::Base
    has_many :enrollments
end

class Enrollment < ActiveRecord::Base
   belongs_to :student
end

Это правильные отношения между ними, и если да, то как мне сделать запрос на соединение с общим столбцом?

Ответы [ 4 ]

6 голосов
/ 04 декабря 2008

Да ActiveRecord будет управлять отношениями за вас, но вы также можете указать соединение при поиске условия в отношениях. Например:

User.find(:all, :joins => :phone_numbers, :conditions => { :phone_numbers => {:name => 'business'} })

Обратите внимание, что использование хеша для условного объявления есть только в Rails 2.2

Но большую часть времени, просто используя отношения ActiveRecord с has_many, должно быть просто отлично, и, как упоминалось в ответах выше, вы бы назвали объект используя, как если бы он был непосредственно в модели ... @student.enrollments

6 голосов
/ 03 декабря 2008

В идеале Rails ожидает следующие столбцы:

Student table:
- id

Enrollment table:
- student_id

При этом ваши отношения должны работать.

Затем, чтобы попробовать, зайдите в консоль Rails и поиграйте:

@student = Student.first
@student.enrollments

Взгляните на этот замечательный справочник Rails по использованию ассоциаций:

http://guides.rubyonrails.org/association_basics.html

0 голосов
/ 04 декабря 2008

Объединенный запрос выполняется автоматически по ассоциации через ActiveRecord.

0 голосов
/ 03 декабря 2008

Что говорит mwilliams, а также следите за тем, чтобы вы хотели, чтобы многие из многих ассоциировались, когда вы следуете руководству.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...