Rails: не может иметь has_many: через ассоциацию до определения ассоциации

Обновление приложения с Rails 4.2.9 до Rails 5.2.1.

Через большую часть неприятной части обновления зависимостей и еще много чего, и, наконец, приложение работает в console и теперь пытается попасть на страницы server, Некоторые страницы загружаются, но другие:

Не может иметь has_many: через ассоциацию "Пользователь # клубы", которая проходит через "Пользователь # членство" до определения сквозной ассоциации.

Не ясно, что могло измениться в Rails 5, чтобы вызвать это? Даже не уверен, где начать искать.

Мысли?

Кажется, сбой на линии, вызванной ниже:

class ViewableStories
  ...
  def for_user
    Story
      .includes(:publications)
      .references(:publications)
      .where(
        stories[:user_id]
        .eq(@user.id)
        .or(
          publications[:club_id]
          .in(@user.club_ids)        <<==== execution halts
          .and(
            publications[:publish_on]
            .lt(Date.today)
            .or(publications[:publish_on].eq(nil))
          )
        )
      )
  end
end

Который вызывается из model/story.rb

  def self.viewable_published_stories_for(user)
    ViewableStories
      .for_user(user)
      .includes(:cover_image, :user, :table_of_contents)
      .published
      .chronological
  end

1 ответ

Решение

Вероятно, это просто проблема заказа в вашей модели. has_many должен прийти перед has_many through,

Итак, сейчас у вас, вероятно, есть:

class User < ApplicationRecord
  ...
  has_many :clubs, through: :memberships
  has_many :memberships
  ...
end

Вам просто нужно переместить has_many :memberships выше has_many through:

class User < ApplicationRecord
  ...
  has_many :memberships
  has_many :clubs, through: :memberships
  ...
end
Другие вопросы по тегам