我有一个拥有很多朋友的用户模型。我希望能够通过名字找到用户的所有朋友。
我希望能够在用户名中找到所有用户名为“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
答案 0 :(得分:1)
你可以很容易地用gem" Ransack"来做。它允许您轻松执行这样的搜索。
答案 1 :(得分: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)
我希望这有帮助!