Rails: не может иметь has_many: через ассоциацию до определения ассоциации - PullRequest
0 голосов
/ 31 октября 2018

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

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

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

Не ясно, что могло измениться в 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 Ответ

0 голосов
/ 31 октября 2018

Вероятно, это просто проблема заказа в вашей модели. 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
...