2014-10-04 36 views
1

我有一个has_many朋友的用户模型。我希望能够通过名字找到用户的所有朋友。通过名称找到关联

我希望能够在用户名中找到所有使用字符串“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) 

我希望这有助于您!