2015-02-11 36 views
2

我正在尋找將附加查詢鏈接到模型中的作用域。範圍的定義是一個問題。在關注定義的重寫範圍中調用超級

module Companyable 
    extend ActiveSupport::Concern 

    included do 
     scope :for_company, ->(id) { 
      where(:company_id => id) 
     } 
    end 
end 


class Order < ActiveRecord::Base 
    include Companyable 

    # I'd like to be able to do something like this: 
    scope :for_company, ->(id) { 
     super(id).where.not(:status => 'cancelled') 
    } 
end 

然而,理解拋出一個NameError: undefined method 'for_company' for class 'Order'

+0

你有沒有找到一種方法來做到這一點? – sixty4bit 2016-02-22 18:21:13

+0

@ sixty4bit對不起,沒有 – 2016-02-22 22:58:12

+0

好的,當我遇到你的問題時,我正在與此搏鬥。我發佈了我想出來的東西,以防它對你有幫助。 – sixty4bit 2016-02-23 02:05:34

回答

0

這是我想出了在我的情況的解決方案:

不是scope,只是因爲scope一個普通類方法去只是「句法糖「爲一類的方法。當您需要使用super進行覆蓋時,這更容易處理。在你的情況下,它看起來像這樣:

module Companyable 
    extend ActiveSupport::Concern 

    module ClassMethods 
    def for_company(id) 
     where(:company_id => id) 
    end 
    end 
end 



class Order < ActiveRecord::Base 
    include Companyable 

    def self.for_company(id) 
    super(id).where.not(:status => 'cancelled') 
    end 
end