【问题标题】:Missing table name in from clause after upgrading to Rails 5.2升级到 Rails 5.2 后 from 子句中缺少表名
【发布时间】:2018-04-14 17:17:54
【问题描述】:

我尝试将一个相当大的项目从 Rails 5.1.4 升级到 Rails 5.2(也将 mysql2 从 0.3.10 升级到 0.5.1),但在使用联接时遇到了问题。考虑以下模型:

class TermsVersionApproval < ApplicationRecord
  belongs_to :terms_version
end

class TermsVersion < ApplicationRecord
end

当我进行连接时,它会通过在 FROM 语句后省略表名并生成 FROM INNER JOIN 来生成无效的 sql:

TermsVersionApproval.joins(:terms_version).to_sql
=> SELECT `terms_version_approvals`.* FROM INNER JOIN `terms_versions` ON `terms_versions`.`id` = `terms_version_approvals`.`terms_version_id`

我尝试用一​​个新的 Rails 5.2 项目重现它,但一切正常。这个项目相当大,所以我假设有一些代码与 Rails 5.2 或新的 mysql2 版本中的一些新代码相冲突。不幸的是,到目前为止我无法找到错误。

关于如何调试它的任何想法?或者过去有没有人遇到过类似的问题?我还必须升级一些其他的 gem(下面列出),所以也许那里引入了一些错误。

如果您需要任何其他代码,请告诉我,我不确定哪些部分可能与问题有关。

宝石升级:

  • rails 5.1.4 -&gt; 5.2
  • awesome_nested_se 3.1.3 -&gt; 3.1.4
  • devise 4.3.0 -&gt; 4.4.3
  • devise-token_authenticatable 1.0.0 -&gt; 1.0.1
  • mysql2 0.3.21 -&gt; 0.5.1
  • state_machines-activemodel 0.5.0 -&gt; 0.5.1
  • (以及我认为与错误无关的其他一些小改动)

【问题讨论】:

    标签: mysql sql ruby-on-rails


    【解决方案1】:

    这个问题可能会告诉你一些事情:

    https://github.com/activerecord-hackery/polyamorous/issues/34

    读完之后,我会在你的项目中查找对 make_constraints 的引用,因为在 5.2 中似乎发生了一些变化,这会导致类似的错误。

    或者,如果您在 Gemfile.lock 中看到 polyamorous gem,问题已解决,只需更新 gem,因为他们在一月份修复了它。

    【讨论】:

    • 这太棒了,这正是问题所在,非常感谢! ransack 使用 polyamorous,我从 1.3.2 更新到 1.3.3,一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    相关资源
    最近更新 更多