Могу ли я напрямую запросить объединенную таблицу, чтобы получить дату "created_at" ассоциации?

У меня есть модель Member и модель Tag. У них есть отношение "многие ко многим", установленное с помощью ассоциаций activerecord. В результате в моей схеме отражена простая таблица соединений members_tags. В этой таблице по умолчанию есть столбец created_at. Я хочу получить доступ к этой информации, чтобы увидеть дату и время, когда тег был применен к члену. Это возможно?

Вы можете, если ассоциация - has_many through: - пожалуйста, укажите в вопросе соответствующий код модели.

max 31.10.2018 14:29

Они оба has_and_belongs_to_many.

Josh Kestenberg 31.10.2018 14:30

Я полагаю, что было бы не так уж сложно просто создать свою собственную таблицу соединений с ее собственной моделью, которую я мог бы запрашивать напрямую. Просто интересно, могу ли я сделать что-то подобное с вещами, как они есть.

Josh Kestenberg 31.10.2018 14:31

Нет, поскольку habtm является безголовым (без модели), нет возможности получить дополнительные данные из таблицы соединений. Однако это действительно просто, если вы используете has_many through:. flatironschool.com/blog/…

max 31.10.2018 14:36

Спасибо большое. Я возился с необработанными SQL-запросами, но мне не повезло. У меня происходило что-то вроде этого: ActiveRecord::Base.connection.exec_query("SELECT member_id, tag_id FROM members_tags WHERE created_at BETWEEN '#{DateTime.now}' AND '#{DateTime.now - 3.months}'").rows Это не возвращало никаких результатов .. У меня почти не было опыта работы с SQL, поэтому это могло быть проблемой с моим запросом ..

Josh Kestenberg 31.10.2018 14:44

Я бы просто переименовал таблицу member_tags и вместо этого установил модель. Значения в этом запросе не следует заключать в кавычки.

max 31.10.2018 14:53
0
6
227
1

Ответы 1

Поскольку у вас есть связь many to many между Член и Ярлык, у вас будет подключенная модель ModelTag или TagModel в зависимости от того, как вы ее назвали). Когда вы создали объединенную таблицу model_tags (или tag_models), у вас также будет доступ к столбцу created_at.

Допустим, у вас есть модель ModelTag. Вы можете получить доступ к любому из его экземпляров столбца created_at, например, с помощью:

ModelTag.first.created_at

если вы хотите получить доступ к столбцу created_at всех экземпляров:

ModelTag.all.map {|mt| mt.created_at}

Не знаю, хотите ли вы этого?

Как написал комментатор выше (макс.), Activerecord has_and_belongs_to_many не позволяет использовать модель. Эта статья, которой поделился Макс, хорошо объясняет это: flatironschool.com/blog/… Решение заключалось в том, чтобы сгенерировать модель и установить мои собственные отношения has_many, through:, что на самом деле то, что вы указали выше, но вы не учли, что рельсы допускают несколько типов многих-ко-многим отношения. Мой вопрос был довольно расплывчатым ... В любом случае, спасибо за поддержку.

Josh Kestenberg 01.11.2018 14:54

Другие вопросы по теме