我有一个插件,我用于使用Rails 2.X或Rails 3的网站。
在Rails 2.3中,我对复杂查询使用了很多“范围”方法:
p = Person.scoped({})
p = p.active
p = p.with_premium_plan if xyz
p
etc.
但是我看到它在Rails 3中发生了变化:
p = Person.scoped
etc.
所以我必须在我的插件中执行类似的操作(能够在两个版本的Rails中运行它),或者你能提出更好的建议吗?
if Rails.version.split(".")[0] == "3"
p = Person.scoped
else
p = Person.scoped({})
end
谢谢! 文斯
答案 0 :(得分:9)
我真的远离检查Rails的文字版本。当Rails 4出现时,你只是为自己做好准备。
如果您对方法是否带参数感到好奇,请使用:
p = (Person.method(:scoped).arity == 1) ? Person.scoped({ }) : Person.scoped
类或模块上的arity
方法返回所需参数的数量,如果它是一个有点任意的数字,则返回负值,如某些参数是可选的。
话虽如此,在Rails 2.3.8中,似乎你无论如何都不需要将任何参数传递给scoped
。