2014-10-04 104 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) 

我希望這有助於您!