Давайте рассмотрим ту именованную область, на которую вы ссылались выше. Представьте себе модельный Вопрос, в котором много комментариев.
named_scope :most_active, :select => "questions.*", :joins => "left join comments as comments_for_count on comments_for_count.question.id = questions.id", :group => "questions.id", :order => "count(questions.id) desc"
:most_active
название вашей области. Вы бы ссылались таким образом: Question.find (: all) .most_active
:select => "questions.*"
по умолчанию области выбирают все столбцы из вашей таблицы в любом случае, поэтому это ограничивает результаты только таблицей вопросов, а не таблицей комментариев. Это необязательно.
:joins => "left join comments as comments_for_count on comments_for_count.question.id = questions.id"
это говорит для каждого вопроса, я также хочу получить все комментарии, связанные с ними. В таблице комментариев есть столбец question_id, который мы будем использовать для сопоставления их с соответствующей записью вопроса. Это важно. Это позволяет нам получить доступ к полям, которых нет в нашей модели!
:group => "questions.id"
Это необходимо для функции count () в предложении order, чтобы сообщить нам, что мы хотим, чтобы количество комментариев основывалось на вопросе. Нам не нужна функция count в нашем предложении order, поэтому нам также не нужен этот оператор группы
:order => "count(questions.id) desc"
Возвращать результаты в порядке количества комментариев, от самого высокого до самого низкого.
Так что для нашего примера, отбрасывая то, что нам не нужно, и применяя к вашим потребностям, мы получаем:
:named_scope :by_program_manager_name, :joins => "left join users on projects.program_manager_id = users.id", :order => "users.name"
Этот named_scope будет называться так:
Project.find(:all).by_program_manager_name
Обратите внимание, что это в основном эквивалентно:
Project.find(:all, :joins => "left join users on projects.program_manager_id = users.id", :order => "users.name")
Но, как указано выше в cam, вы должны действительно знать базовый SQL. Ваши способности будут серьезно ограничены без этого понимания