Ruby on rails ';范围为';Rails 2.X ad Rails 3的方法

Ruby on rails ';范围为';Rails 2.X ad Rails 3的方法,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有一个插件,用于使用Rails2.X或Rails3的网站 在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.

我有一个插件,用于使用Rails2.X或Rails3的网站

在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
谢谢!
文斯

我真的不想检查Rails的文字版本。当Rails 4问世时,你只是在为自己的失败做准备

如果您想知道某个方法是否接受参数,请使用以下方法:

p = (Person.method(:scoped).arity == 1) ? Person.scoped({ }) : Person.scoped
类或模块上的
arity
方法返回所需的参数数,如果是任意数,则返回负值,有些参数是可选的


也就是说,在Rails 2.3.8中,您似乎不需要将任何参数传递给
scoped

可能是Great的重复,我没有注意到scope方法在Rails 2.3.8中不需要空哈希(只触发了一个警告),这解决了我的问题,谢谢!顺便说一句,谢谢你的“arity”提示!