@Splite

Как заставить работать .includes в RoR?

Есть две модели
class Version < ActiveRecord::Base
  has_many :servers
end

class Server < ActiveRecord::Base
  belongs_to :version
end

Т.е. у каждого сервера есть версия. Пишу, например, такой код
Server.includes(:version).all
Затем в view прохожу его и пытаюсь вывести версию, если она есть (haml)
- servers.each do |s|
    %p= s.version.name is s.version

Но ни одна версия не выводится, хотя они точно есть. Более того, в rails console код Server.includes(:version).all генерирует ТОЛЬКО запрос SELECT "servers".* FROM "servers" , хотя насколько я понял, должен быть второй на запрос версий

UPD
Только что проверил, такая проблема только на postgresql. На sqlite генерируется два запроса и все работает. При этом больше ничего не менялось (пробую заменять блок development: в databases.yml)
  • Вопрос задан
  • 204 просмотра
Пригласить эксперта
Ответы на вопрос 2
@thepry
Ruby on rails, 1С разработчик
Возможно у вас индексы по primary key в базе сломались или что-то подобное?
Ответ написан
premas
@premas
Full-stack web-developer
Запрос выглядит так только в том случае, если у вас нет ни одной записи version, у которой server_id соответствует servers.id. Проверьте в pg_admin3 целостность базы и наличие этих полей и соответствующих таблиц.

Что в консоли после выполнения этих команд?
Version.all.map &:server_id
Server.all.map &:version_ids


А после этих?
Version.includes(:server).all.map &:server_id
Server.includes(:versions).all.map &:version_ids
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы