我在我的课程中有一个方法需要一个数字参数。它看起来是这样的:如何在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