Rails:在定义关联之前,不能具有has_many:through关联

时间:2018-10-30 23:52:23

标签: ruby-on-rails activerecord has-many-through activerecord-relation

将应用程序从Rails 4.2.9升级到Rails 5.2.1。

通过许多令人讨厌的部分更新了依存关系,最终在console中运行了应用程序,现在尝试访问server上的页面。一些页面加载,而其他页面:

  

不能具有has_many:through关联“ User#clubs”,该关联在定义关联之前必须经过“ User#memberships”。

不清楚在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 :(得分:3)

这可能只是模型中的订购问题。 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