2014-10-04 7 views
1

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

Я хочу, чтобы найти всех пользователей со строкой «john» в их имени пользователя.

Пользователи

id |   email   |   created_at   |   updated_at   |      password_digest      |  remember_token  | admin | username | password_reset_token | password_reset_sent_at | provider | uid | generated_password 
-------+---------------------------+----------------------------+----------------------------+--------------------------------------------------------------+------------------------+-------+---------------+----------------------+------------------------+----------+-----+-------------------- 
27288 | ******@hotmail.com | 2014-02-19 17:25:22.545866 | 2014-02-19 17:25:22.545866 | $2a$10$hjdAPWYTorCN7NW6QawmtOMqTk.DP8m2e.I9XjfujRG8em8eq6z9G | dxowM5tTTalNLWSO_5j8sw | f  | huntingtonl93 |      |      |   |  | f 
    23 | *******@gmail.com    | 2013-07-05 17:18:59.64622 | 2013-07-05 17:18:59.64622 | $2a$10$4D0cML22vnVYuT0tJTJwMO/T4xuiGYUU70BnK1ug3K.TE1.pWG64e | FS2aVM57bX0ZiMBNuWnxLA | f  | one   |      |      |   |  | f 
    31 | ********@gmail.com  | 2013-09-06 21:47:52.869246 | 2013-09-06 21:47:52.869246 | $2a$10$XW6jPGZTiYo6KZm4WWOBye0b.mpNuKGt89gMLVRCjF7kjuhzHXzJG | TUsweMN36i_eouveEFU9cQ | f  | drebenok  |      |      |   |  | f 
    6388 | *******@startupv8.com  | 2013-11-25 00:20:44.124276 | 2013-11-25 00:20:44.124276 | $2a$10$O5V/8C2vs.CpkYDDwByjiOOVkf0FlWb8lsMVX/r8cPnHbL8G0gRda | 2duwh0WURFI10I1PcBnD9Q | f  | ihab 

Друзья

id | user_id | user_id_friend |   created_at   |   updated_at 
----+---------+----------------+----------------------------+---------------------------- 
10 |  15 |    23 | 2013-08-13 01:55:41.406368 | 2013-08-13 01:55:41.406368 
12 |  15 |    28 | 2013-08-13 01:55:57.025223 | 2013-08-13 01:55:57.025223 
14 |  16 |    23 | 2013-08-13 01:57:35.910647 | 2013-08-13 01:57:35.910647 
16 |  17 |    23 | 2013-08-13 01:58:01.051038 | 2013-08-13 01:58:01.051038 
18 |  17 |    24 | 2013-08-13 01:58:08.866769 | 2013-08-13 01:58:08.866769 

ответ

1

Вы можете сделать это, добавив условия для вашей ассоциации, как так:

user.friends.where("username like ?", '%john%') 

Это включает в себя только немного SQL знаний. Мы хотим, чтобы имя пользователя было «как» строка, которую мы даем. Сама строка ('% john%') будет соответствовать любому имени пользователя, которое содержит «john» где-то внутри. «%» - это символ подстановки, который будет соответствовать любым символам, которые могут появляться до или после «john».

Если вы только хотели найти пользователь, чьи имена пользователей начать с сортиром, вы могли бы сделать это следующим образом:

user.friends.where("username like ?", "john%") 

Если вы только хотели найти пользователь, чьи имена конца с сортиром, вы делаете это вместо этого:

user.friends.where("username like ?", "%john") 

Этот подход может применяться к любым условиям, которые вы использовали бы при поиске в ActiveRecord. Например, вы могли бы найти все друг с пользователями то, кто не имеют адресов электронной почты:

user.friends.where(email: nil) 

Я надеюсь, что это помогает!