Rails проблемы с поиском Join - PullRequest
0 голосов
/ 19 октября 2010

Я занимаюсь разработкой небольшого пользовательского приложения в Rails 3 и застрял в функции поиска. Я получил таблицу под названием Профиль, которая содержит имя и фамилию. При поиске в этой таблице я использую:

Profile.find_all_by_firstname(params[:keyword])

Дело в том, что я хочу, чтобы пользователь мог искать в таблице, содержащей контакты (только profile_id и friend_id), но я также хочу, чтобы они могли искать по имени и здесь. Как это сделать?

Например:

Джон ищет имя Энн, которое является его контактным лицом. Поскольку таблица контактов не хранит имена, поиск должен включать в запрос таблицу профилей. Как я могу это сделать?

UPDATE

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

Profile.find_all_by_firstname(params[:keyword],
:select => "firstname, lastname, user_id",
:joins => "left outer join contacts on profiles.id = contacts.profile_id")

1 Ответ

1 голос
/ 19 октября 2010
Profile.find_all_by_firstname(params[:keyword],
:select => "firstname, lastname, user_id",
:joins => "left outer join contacts on profiles.id = contacts.profile_id")

этот запрос выбирает всех, потому что вы выполняете поиск только по имени

current_user = Profile.first 
Profile.find(:all, 
             :conditions => ["profiles.firstname = ? AND contacts.friend_id = ?", params[:keyword], current_user.id],
             :joins => :contacts)

или сделать соединение условным

current_user = Profile.first 
Profile.find_all_by_firstname(params[:keyword],
:select => "firstname, lastname, user_id",
:joins => "INNER JOIN contacts on (profiles.id = contacts.profile_id AND contacts.friend_id = #{current_user.id})")

но я не совсем уверен в синтаксисе

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