Могу ли я использовать объект модели непосредственно в поиске - PullRequest
0 голосов
/ 13 мая 2010

У меня есть следующие модели:

студент учебный класс Учитель

ученик может иметь несколько классов, в классе может быть 0 или 1 учитель. Я хочу иметь возможность вызывать метод для ученика, чтобы увидеть, есть ли у него конкретный учитель, и вернуть true или false.

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

a_teacher = Teacher.new(:name => "Bob", :age => 30)

self.classes.all(:conditions => ["teacher.name = ? AND teacher.age = ?", a_teacher.name,a_teacher.age], :joins => :teacher)

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

Ответы [ 2 ]

0 голосов
/ 13 мая 2010

Я хочу иметь возможность вызывать метод на студент, чтобы увидеть, есть ли у них конкретный учитель, и верните истину или ложь.

Почему вы ищете учителя по имени и возрасту, а не по идентификатору учителя?

self.classes.all(:conditions => ["teacher_id = ?", teacher_student_is_interested_in.id])

Твой вопрос довольно сложен для понимания. Опубликуйте больше вашей модели, если вам нужен более подробный ответ.

Edit: Учитывая дополнительную информацию, которую вы разместили, похоже, что вы пытаетесь что-то, что больше похоже на поиск. Я хотел бы предложить прочитать следующее:

  1. named_scope
  2. searchlogic
0 голосов
/ 13 мая 2010

Я думаю, что вы должны использовать его, как вы написали в Quititon. ActiveRecord не анализирует строку запроса таким образом, чтобы угадать метод экземпляра переданного объекта. Вам следует подумать о создании некоторого named_scope, например: by_teacher (teacher), который будет искать по имени и возрасту, если вам это нужно.

...