2
我知道可以在Rails模型中創建一個default_scope來限制選擇。但是,這可以/將會被無所謂的呼叫覆蓋。Rails必需範圍
是否有可能有一個默認應用的範圍,而不管Rails範圍方法如何?初始化方法可以做些什麼?
我知道可以在Rails模型中創建一個default_scope來限制選擇。但是,這可以/將會被無所謂的呼叫覆蓋。Rails必需範圍
是否有可能有一個默認應用的範圍,而不管Rails範圍方法如何?初始化方法可以做些什麼?
是的,你可以猴子補丁ActiveRecord :: Base方法。
見無範圍的方法:
def unscoped #:nodoc:
block_given? ? relation.scoping { yield } : relation
end
你應該猴補丁#relation方法,包括默認的範圍。
放置在config/initializers
目錄中的下列文件:
module ActiveRecord
class Base
def relation
base_relation = super
base_relation.where(#default conditions)
end
end
end
您還可以使用的ActiveSupport ::關注這可能是首選的方式,我只是想指出的是您應該擴展#relation
方法。無論您採用哪種方式擴展ActiveRecord,我的建議是您應該堅持使用#default_scope
方法並編寫必要的測試以確保關係不被縮小。
這沒有任何意義。如果範圍是「強制性的」,以至於無法規避它,那麼您可能需要重新考慮如何構建數據。 – meagar
我知道它在正常情況下沒有意義。我試着選擇模擬多重繼承,或者類似的東西。 –