Rails中的动态范围?

时间:2017-06-16 10:10:49

标签: ruby-on-rails ruby scope

是否有可能在轨道上的红宝石中做这样的事情?

  SELECT * FROM
  (
    SELECT petID as pet,sum(numpet) as numberofpets
    FROM petTable
    GROUP BY petID 
  ) base
  pivot
  (
    COUNT(SUM(numpet)) FOR petid IN ([1],[2],[3])
  ) AS pivottable

更新:为了澄清,这与Rails中的scope类方法没有特别的关系。我可能应该避免在最初询问时使用术语“范围”,以避免混淆。请随意将其视为def method(scope: 'all') # so that it would use Model.all by default Model.scope end method(scope: 'last(10)') # to get it to call Model.last(10) 。将保留原始陈述的问题,以保留历史作为其中的答案之一。

2 个答案:

答案 0 :(得分:2)

您可以在模型本身中定义相应的范围,以便使用和不使用参数进行处理..

scope :scoping, ->(method = 'all') { send(method) }
scope :scoping_with_arg, ->(method = 'limit', arg = 1) { send(method, arg) }

然后,

Model.scoping('first')
Model.scoping_with_arg('last', 10)

答案 1 :(得分:0)

我通过使用ruby的BEGIN TRAN UPDATE t SET email = REPLACE( emailIn , SUBSTRING( emailIn , CHARINDEX('@', emailIn) , LEN(emailIn) - CHARINDEX(emailIn, '@') ) , '@gmail.com' ) COMMIT TRAN #send并使用数组来支持具有多个参数的模型范围,从而找到了如何:

keyword arguments