我在我的課程中有一個方法需要一個數字參數。它看起來是這樣的:如何在Rails中創建一個動態命名的方法?
def with_at_least_x_posts(min_posts)
self.where("posts_counter >= ?", min_posts)
end
我想提出的是採用該參數的名字裏面,而不是在括號中的方法,所以不是調用
User.with_at_least_x_posts(10)
我可以打電話
User.with_at_least_10_posts
這將需要被通過某種正則表達式機構限定該方法。我知道find_by
方法就是這樣工作的(即find_by_some_column
),所以應該可以嗎?
有人能告訴我如何實現在Ruby中1.9.2和Rails 3.1沒有挖掘到Rails核心,並找出爲自己節省了一些時間?
謝謝!
更新:在等待答案時,我一直在深入研究Rails核心。好像他們是在覆蓋的ActiveRecord::Base方法method_missing
和委託定製的方法,以一個名爲DynamicFinderMatch模塊處理。有趣的東西! 將是非常好的,能夠在Ruby中定義這樣的方法:
def /with_at_least_[0-9]+_posts/
x = $0
end
,但我想這是不是真的有可能在這個時間點。有趣的東西!
Yeup!這確實是我的問題的正確答案,我會選擇它。但是,在你和@Peter之間討論之後,我已經決定在這種情況下它增加了一層不必要的複雜性。我只會去一個命名的範圍。謝謝! –
我認爲這是正確的舉措。很高興知道這種方法的時候,但它是一個實際的解決方案。 – ghayes
如果正則表達式不匹配,你不應該調用super嗎? – DGM