Gem WhereableScope: 把 scope 用作 where 參數

mizuhashi · 2026年01月29日 · 最后由 mizuhashi 回复于 2026年01月30日 · 172 次阅读

https://github.com/onyxblade/whereable_scope

例子:

class Order < ActiveRecord::Base
  has_one :order_address
  has_one :address, through: :order_address

  scope :by_address, ->(address) { joins(:order_address).where(order_addresses: { address: address }) }

  # 把by_address scope註冊為可用的where參數
  whereable_scope :by_address, as: :address
end

# 現在你可以:
Order.where(address: address)

僅供娛樂

没有看太懂,为什么不:

Order.joins(:address).merge(address)
zhandao 回复

address 如果是對象的話,是不能直接 merge 的,只有 scope 可以被 merge。

我想到做這個 gem 的初衷是,當 address 是 belongs_to association,Order.where(address: address) 是可用的。但當 address 被移出,作為 through association 存在的時候,這個 query 就不能用了,這個 gem 可以讓舊的 query 繼續能用。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号