【问题标题】:Rails: Cannot have a has_many :through association before association is definedRails:在定义关联之前不能有一个has_many:通过关联
【发布时间】:2019-04-04 02:13:21
【问题描述】:

将应用程序从 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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 是的。就这么简单!谢谢!但在 Rails 4.x 中并非如此。似乎无法找到记录此更改的位置。如果有人知道请发帖。想知道我忽略了什么。再次感谢!
    • 我有一个 Rails 5.0 应用程序,我刚刚升级到 5.2。我遇到了同样的错误并应用了这个解决方案来解决我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 2012-04-01
    相关资源
    最近更新 更多