преобразовать запрос SQL в запрос рельсов со многими отношениями, что является наилучшей практикой? - PullRequest
0 голосов
/ 08 мая 2020

Привет, это моя модель данных:

enter image description here

и я хочу преобразовать этот запрос в activeRecord API

select c.id, c.name, c.phone, c.created_at,c.updated_at,s.status
from contacts c,contacts_lists cl, contactstatuses s
where cl.list_id = ? and s.company_id = ? and c.id = cl.contact_id and c.id = s.contact_id

Как лучше всего это сделать? .... также какова здесь лучшая практика? Запустите sql plain или используйте activeRecord API

1 Ответ

1 голос
/ 08 мая 2020

Вы можете использовать объединения, чтобы объединить все нужные вам таблицы. Я предполагаю, что вы установили все отношения в своих моделях и что ваши модели называются Contact, Contactstatus и ContactList. Тогда вы сможете создать такой запрос:

select c.id, c.name, c.phone, c.created_at, c.updated_at, s.status
from contacts c
JOINS contacts_lists cl ON cl.contact_id = c.id
JOINS contactstatuses s ON s.contact_id = c.id
where cl.list_id = ? 
  and s.company_id = ?;

Со следующим кодом:

# I filled the id values (questionmarks) with a 1
Contact.select(:id, :name, :phone, :created_at, :updated_at, Contactstatus.arel_table[:status]).joins(:contacts_lists, :contactstatuses).where(contacts_lists: { list_id: 1 }, contactstatuses: { company_id: 1 })
...