Вы пытаетесь редактировать свои поля на слишком базовом уровне. Список полей, которые вы видите, когда добавляете Google Analytics в качестве источника данных, составляет ВСЕ ГА измерения и метрики. Просто нажмите, чтобы добавить его в качестве источника данных, вы не хотите пытаться редактировать или выбирать ваши измерения и метрики на этом этапе. После подключения источника данных у вас есть все измерения и метрики GA, доступные вам, и вы можете просто выбрать из них то, что вы хотите использовать для каждой таблицы или диаграммы.
Взгляды, хорошие мне.
Сгенерированные соединения должны просто быть или на идентификаторах PK таблиц объекта, или на идентификаторах FK в объединяющей таблице - которые являются оба индексами.
Вероятно, было бы хорошо, чтобы посмотреть на сгенерированный ActiveRecord SQL и сравнить его с индексами.
В зависимости от то, какая база данных Вы находитесь на Вас, могло затем прокрутить тот SQL Объяснить план (или независимо от того, что инструмент существует, я думаю Oracle здесь),
Для упрощения кода Вы могли посмотреть на использование has_and_belongs_to_many
также. Это позволило бы Вам избавиться от объекта CityPermission (если Вы не хотите использовать это, чтобы хранить данные сам по себе),
Вот SQL, для которого генерирует ActiveRecord user.cities
:
SELECT `cities`.* FROM `cities` INNER JOIN city_permissions ON (cities.id = city_permissions.city_id) WHERE (city_permissions.user_id = 1 )
ОБЪЯСНИТЕ результаты ниже:
+----+-------------+------------------+--------+---------------------------------------------------------------------+-----------------------------------+---------+-------------------------------------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------------+--------+---------------------------------------------------------------------+-----------------------------------+---------+-------------------------------------------------+------+-------------+
| 1 | SIMPLE | city_permissions | ref | index_city_permissions_on_user_id,index_city_permissions_on_city_id | index_city_permissions_on_user_id | 5 | const | 1 | Using where |
| 1 | SIMPLE | cities | eq_ref | PRIMARY | PRIMARY | 4 | barhopolis_development.city_permissions.city_id | 1 | |
+----+-------------+------------------+--------+---------------------------------------------------------------------+-----------------------------------+---------+-------------------------------------------------+------+-------------+
И вот SQL, для которого генерирует ActiveRecord user.city_permissions
:
SELECT * FROM `city_permissions` WHERE (`city_permissions`.user_id = 1)
С ОБЪЯСНИТЬ результатами для того запроса:
+----+-------------+------------------+------+-----------------------------------+-----------------------------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------------+------+-----------------------------------+-----------------------------------+---------+-------+------+-------------+
| 1 | SIMPLE | city_permissions | ref | index_city_permissions_on_user_id | index_city_permissions_on_user_id | 5 | const | 1 | Using where |
+----+-------------+------------------+------+-----------------------------------+-----------------------------------+---------+-------+------+-------------+
Похож на него, действительно работает правильно. От MySQL Manual:
Одна строка читается из этой таблицы для каждой комбинации строк из предыдущих таблиц. Кроме системы и типов константы, это - самый лучший тип соединения. Это используется, когда все части индекса используются соединением, и индексом является PRIMARY KEY или Уникальный индекс.
Все строки с соответствием индексным значениям читаются из этой таблицы для каждой комбинации строк из предыдущих таблиц. касательно используется, если соединение использует только крайний левый префикс ключа или если ключом не является PRIMARY KEY или Уникальный индекс (другими словами, если соединение не может выбрать одну строку на основе значения ключа). Если ключ, который используется, соответствует только нескольким строкам, это - хороший тип соединения.