简体   繁体   English

Rails的Rails find_by_SQL

[英]Rails find_by_SQL with Rails

I'm using a find_by_sql method to search users in my userstable. 我正在使用find_by_sql方法搜索用户表中的用户。

is there a possibility to use rails code in the select statement? 有可能在select语句中使用rails代码吗?

 User.find_by_sql ["SELECT DISTINCT
                    users.*
                  FROM
                    users
                  JOIN
                    clients_courses cc
                  ON
                    cc.client_id = users.client_id
                  LEFT JOIN
                    memberships m
                  ON
                    m.user_id = users.id AND m.course_id = cc.course_id
                  WHERE
                    cc.course_id = ?
                    AND
                    m.user_id IS NULL
                    AND
                    users.active = ?
                    AND
                    users.firstname LIKE ? or users.lastname LIKE ?
                    AND NOT IN ( RAILS CODE )", self.id, true, "#{search}%", "#{search}%"]
  end

I Marked the position with RAILS CODE 我用RAILS CODE标记了位置

I want to do someting linke this: 我想做一些链接:

Membership.where("course_id = ?", self.id).users Membership.where(“ course_id =?”,self.id).users

is there a way to do this? 有没有办法做到这一点?

You can do this - 你可以这样做 -

    member_user_ids  = []
    Membership.where("course_id = ?", self.id).map{|membership| membership.users.map{|user| member_user_ids << user.id}}

    # you might want to put a uniq! on member_user_ids

    User.find_by_sql ["SELECT DISTINCT
                users.*
              FROM
                users
              JOIN
                clients_courses cc
              ON
                cc.client_id = users.client_id
              LEFT JOIN
                memberships m
              ON
                m.user_id = users.id AND m.course_id = cc.course_id
              WHERE
                cc.course_id = ?
                AND
                m.user_id IS NULL
                AND
                users.active = ?
                AND
                users.firstname LIKE ? or users.lastname LIKE ?
                AND users.id NOT IN ( #{member_user_ids.join(',')} )", self.id, true, "#{search}%", "#{search}%"]

You can also have a look at link which explains how to put array of strings in where clause. 您也可以查看链接 ,该链接说明了如何在where子句中放置字符串数组。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM