Число соединений в разных таблицах - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть три объекта (List, ListType and GlobalList), и я пытаюсь получить количество элементов в GlobalList с конкретным global_id и конкретным list_type_id.

Это похоже на работу:

select count(*) from globals_lists gl, lists l where gl.global_id=946 and gl.list_id=l.id and l.list_type_id=10;

Структура выглядит следующим образом:

class ListType < ActiveRecord::Base
 has_many: lists
end

class List < ActiveRecord::Base
   has_many :global_lists
   belongs_to :list_type
end

class GlobalList < ActiveRecord::Base
  belongs_to :list
end

Не уверен, как сделать вызов AR - на этот раз, но может показаться, что в месте соединения. list_type_id всегда будет 10.

a=GlobalList.where("global_id=?",119).joins(:list)

Как бы я сделал этот вызов ActiveRecord? Большая часть материала, который я нашел через Google, касалась именованных областей, но, похоже, это можно было бы сделать без областей.

1 Ответ

1 голос
/ 09 декабря 2011

Первый подход:

result = GlobalList
  .select("COUNT(*) AS total")
  .where("globals_lists.global_id=? AND lists.list_type_id=?",119, 10)
  .joins(:list)

Затем вы будете учитывать свой результат, используя result.total

Второй подход заключается в использовании count метода вместо select("COUNT(*) AS total")

GlobalList      
  .where("globals_lists.global_id=? AND lists.list_type_id=?",119, 10)
  .joins(:list)
  .count 

Подробную информацию об интерфейсе запросов ActiveRecord можно найти в руководствах по Rails или непосредственно в том, что вас интересует count и объединения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...