Gem WhereableScope: 把 scope 用作 where 參數

mizuhashi · January 29, 2026 · Last by mizuhashi replied at January 30, 2026 · 247 hits

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)
Reply to zhandao

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

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

You need to Sign in before reply, if you don't have an account, please Sign up first.