ruby-on-rails - Rails : Cannot have a has_many :through association before association is defined

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

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

通过大部分令人讨厌的部分,更新了依赖关系和诸如此类的东西,最终使应用程序在console中运行,现在尝试访问server上的页面。加载了一些页面,但其他页面:

Cannot have a has_many :through association 'User#clubs' which goes through 'User#memberships' before the through association is defined.



不清楚在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

最佳答案

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

关于ruby-on-rails - Rails : Cannot have a has_many :through association before association is defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53074430/

相关文章:

ruby-on-rails - 测试 Rails 应用程序的 Braintree 透明重定向

ruby-on-rails-3 - 事件管理员 has_many 通过删除关联

ruby-on-rails - 如何在 has_many 的情况下通过 : association? 验证关联记录的存在

ruby-on-rails - 有_许多 :through looking for inexistent column

ruby-on-rails - 在 rails 中使用命名空间时使用双 Controller ?

ruby-on-rails - validates_associated 的 Rails 用例

mysql - gem在rails中安装mysql问题

ruby-on-rails - Rails 4 ActiveRecord,如果记录存在,则使用id,否则创建一个新记录

ruby-on-rails - Rails : returning records for which a relationship does not exist

ruby-on-rails - 如何修复Rails 5.1.7中的 `uninitialised constant ' ActiveRecord_Relation'`?