【发布时间】:2009-10-20 22:03:13
【问题描述】:
这个问题的背景非常复杂和令人费解,因为我正在寻找一个简单的答案,所以我将在解释我的问题时将其搁置一旁,而是提供这种假设情况。
如果我有一个名为汽车的简单 ActiveRecord 模型,named_scopes 如下所示:
named_scope :classic, :conditions => { :build_date <= 1969 }
named_scope :fast, lambda { |speed| :top_speed >= speed }
忽略范围本身,如果我要调用:
Automobile.scopes
这究竟会返回什么?我在控制台中看到的是:
[ :classic => #<Proc:0x01a543d4@/Users/user_name/.gem/ruby/1.8/gems/activerecord-2.3.4/lib/active_record/named_scope.rb:87>,
:fast => #<Proc:0x01a543d4@/Users/user_name/.gem/ruby/1.8/gems/activerecord-2.3.4/lib/active_record/named_scope.rb:87> ]
在我看来,这似乎是一个键/值数组,键是命名范围的符号,值是指向 ActiveRecord 中的 named_scope.rb 文件的 Proc。
如果我希望将哈希或 Proc 作为实际命名范围(对于 :classic 的含义),我会收到“:conditions => { :build_date
我正在编写一个有条件地合并一些 named_scopes 的插件,我在这方面遇到了一些阻力。 我目前正在使用以下内容来合并这些范围:
scopes_to_use = Automobile.scopes
scoped_options = {}
Automobile.scopes.each do |scope|
scoped_options.safe_merge!(eval "Automobile.#{scope}(self).proxy_options")
end
忽略我在这里所做的“正确性”,有没有更好的方法可以检索提供给 named_scope 的实际 Hash 或 Proc?我不喜欢在这个函数中使用“eval”,如果我真的可以检索 Hash 或 Proc,那么我将能够引入一些更强大的合并逻辑。对此的任何想法将不胜感激。谢谢。
【问题讨论】:
标签: ruby-on-rails activerecord scope named-scope