簡體   English   中英

以編程方式應用接受參數的ActiveRecord范圍

[英]Programmatically apply an ActiveRecord scope that accepts arguments

我正在構建一個系統,其中必須以編程方式將一個或多個where子句應用於ActiveRecord Relation對象。 這在以下情況下效果很好:

假設Employee模型的范圍稱為“男性”

然后:

filter_name = "male"
Employee.send(filter_name)  # works

但是,對於帶有參數的范圍,

"NoMethodError (undefined method `age_range(45, 55)'

例如,這個范圍:

scope :age_range, ->(low, high) {where("age >= #{low} AND age <= #{high}")}

范圍在控制台中工作正常,例如

Employee.age_range(45,55)

謝謝你的建議。

Object# send接受方法的名稱及其參數:

name = :age_range
low  = 45
high = 55
Employee.send(name, low, high)

我建議使用Object# public_send ,以確保您只使用可公開訪問的API:

Employee.public_send(name, low, high)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM