Нам нужно получить logs
для customer comm record
в наших рельсах. Условие в простом английском языке является журналы для customer_comm_record на основе:Эти два вопроса одинаковы в рельсах 3.2.12?
#1. the sales_id in customer comm record's customers is equal to current user id
#2. the sales_id in customer comm record's customer's project is equal to the current user id.
SQL код # 1 может быть (SQL#1
):
Log.joins(:customer_comm_record =>:customer).where('customers.sales_id = ?', session[:user_id])
SQL код # 2 может быть (SQL#2
):
Log.joins(:customer_comm_record =>{ :customer => :projects}).where('projects.sales_id = ?', session[:user_id])
Вот что мы придумали (SQL#3
) в одной строке:
Log.joins(:customer_comm_record =>{ :customer => :projects}).where('customers.sales_id = ? OR projects.sales_id = ?', session[:user_id], session[:user_id])
код SQL, возвращенный выше в rails console
есть (замена сессии [: user_id] с 1):
SELECT "logs".* FROM "logs" INNER JOIN "customer_comm_records" ON "customer_comm_records"."id" = "logs"."customer_comm_record_id" INNER JOIN "customers" ON "customers"."id" = "customer_comm_records"."customer_id" INNER JOIN "projects" ON "projects"."customer_id" = "customers"."id" WHERE (customers.sales_id = 1 OR projects.sales_id = 1)
Вопрос заключается в том погоды SQL#3 == SQL#1 UNION SQL#2
. Может кто-то ответить на вопрос? Если это не так, то какая? Благодарю.
Извините, на что первый метод и второй метод? – user938363
Первый метод = SQL # 1 UNION SQL # 2. Второй метод = SQL # 3. – PinnyM
ОК. Разница имеет смысл. Может быть, случай, когда у клиента нет проекта, но может иметь журналы (вероятно, очень редко). Поскольку в rails нет объединения, существует ли способ выполнить SQL # 1 UNION SQL # 2 в рельсах? – user938363