【问题标题】:How to unscope joins in RoR 4如何在 RoR 4 中取消连接范围
【发布时间】:2015-06-11 12:30:38
【问题描述】:

尝试取消连接范围。

例子:

class MyModel < ActiveRecord::Base
  default_scope -> { joins("JOIN other_table ON other_table.this_table_id = this_table.id") }
  scope :without_relation -> { unscope(:joins) }
end

问题在于它取消了所有连接的范围,即使是那些由 AR 关系自动构建的连接。

【问题讨论】:

  • 您是否尝试将名称更改为 joins 以外的其他名称?我猜这可能是原因。
  • 嗯? :joinsuncope 的定义值:github.com/rails/rails/blob/…
  • 哇。难道你不能只定义一个具有相对较短标识符的命名范围而不需要它时不使用它吗?嗯,这不是一个真正的问题,更像是供考虑的信息。
  • @D-side 事情是我在少数情况下不需要它。而且代码库已经太大了。

标签: ruby-on-rails rails-activerecord default-scope active-record-query


【解决方案1】:

这就是我所做的:

module UnscopeJoins
  extend ActiveSupport::Concern

  def unscope_joins(joins_string)
    joins_values.reject! {|val| val == joins_string}
    self
  end
end

ActiveRecord::Relation.send :include, UnscopeJoins

用法:

scope :without_joins, -> { unscope_joins("JOIN table on table2.id = table1.table2_id") }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 2022-11-02
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多