嗨如何構建一個對所有模型都通用的named_scope。如何爲所有ActiveRecord模型使用通用named_scope
3
A
回答
8
我做到這一點的把這個代碼lib/has_common_named_scopes.rb
:
module HasCommonNamedScopes
def self.included(base)
base.class_eval {
# Named scopes
named_scope :newest, :order => "#{base.table_name}.created_at DESC"
named_scope :freshest, :order => "#{base.table_name}.updated_at DESC"
named_scope :limit, lambda { |limit| {:limit => limit} }
}
end
end
,然後包括在各型號的模塊,我需要他們:
class MyModel < ActiveRecord::Base
include HasCommonNamedScopes
我建議你使用base.table_name
來在引用這些命名範圍中的列時限定表格,就像我在示例中所做的那樣。否則,當您將這些指定的作用域與其他連接到其他表的作用域相結合時,會遇到模糊引用的問題。
更新:
scope
用Rails> 3使用和named_scope
在以前的版本中使用。
1
還有Thoughtbot's Pacecar,增加了一幫很常見的命名範圍的每一個模型。它可能會與你正在尋找的東西一起出現。如果你需要自定義的東西,但是,Casper Fabricius有正確的想法。
0
對於Rails4項目,我通過擴展ActiveRecord::Base
實現這一點,所有的類Rails模型繼承,在初始化(猴修補方案,要小心)
# in /config/initializers/shared_scope_initializer.rb
module SharedScopes
extend ActiveSupport::Concern
module ClassMethods
def named_scope
return where(attribute: value) # query here
end
end
end
ActiveRecord::Base.send(:include, SharedScopes)
相關問題
- 1. ActiveRecord的named_scope,.scopes
- 2. Rails的2.3:使用其他named_scope內的另一個模型named_scope
- 3. 如何在模型named_scope中使用語言環境?
- 4. 如何使用named_scope過濾我的模型中的記錄
- 5. 爲什麼ActiveRecord在使用update_attributes或保存時驗證模型的所有列
- 6. Rails,使用named_scope
- 7. 如何篩選用於association_ids ActiveRecord模型?
- 8. 如何使所有模型類都可以使用通用搜索代碼?
- 9. 爲所有類型的Django模型編寫通用函數
- 10. Rails3 - 如何獲取ActiveRecord模型的所有屬性和關聯?
- 11. 如何使用通用關係檢索與模型相關的所有項目?
- 12. 如何從另一個ActiveRecord模型構建一個ActiveRecord模型?
- 13. 如何使用嵌套模型定義一個named_scope來捲起has_many?
- 14. 通過named_scope作爲參數
- 15. 測試使用ActiveRecord模型的gem
- 16. 使用函數修改ActiveRecord模型
- 17. 使用url_for(的form_for)非ActiveRecord的模型
- 18. 在ActiveRecord模型中使用def_method
- 19. 使用ActiveRecord ::跨模型的關係
- 20. 使用ActiveRecord模型生成輸入ID
- 21. 在Java中使用Ruby ActiveRecord模型
- 22. 如何爲所有模型創建一個通用的after_create回調?
- 23. 爲cakephp中的所有模型添加通用範圍
- 24. 如何爲所有數字類型製作通用類?
- 25. 如何在rails中使用ActiveRecord模型的繼承?
- 26. 如何使用Rail的ActionCable訪問ActiveRecord模型?
- 27. 如何使用Rails 3本地化activerecord模型值
- 28. 如何使用ActiveRecord模型創建'OR'條件
- 29. 如何在模型之外使用ActiveRecord驗證器?
- 30. 如何使用rspec測試不ActiveRecord模型?