2008-10-09 20 views
12

我有在多個ActiveRecord模型中重複使用的named_scope。 例如:如何從ActiveRecord模型中提取常用named_scopes

named_scope :limit, lambda {|limit| {:limit => limit}}  

什麼是提取該碼被跨模型共享的最佳實踐。 是否有可能將其提取到模塊,或者我應該重新打開ActiveRecord :: Base類?

回答

21

使用模塊。像這樣的東西應該工作:

module CommonScopes 
    def self.included(base) 
    base.class_eval do 
     named_scope :limit, lambda {|limit| {:limit => limit}} 
    end 
    end 
end 

然後就包括CommonScopes,你會好到哪裏去。

+1

這似乎爲類級別的工作,而不是實例級。例如:`User.limit(1)`工作,但第二次調用限制在這裏引發一個錯誤:`users = User.limit(5); users.limit(1)`。任何解決方案的實例級別? – 2011-04-18 17:14:11

相關問題