我在项目中使用Rails 3.2.8,我想使用名为'open'的范围
scope :open, where(:closed => false)
以便使用JSON发送它。像json.open @foo.bar.open.count
这样的东西。但是Rails将.open
识别为Ruby方法(我认为与打开文件相关),而不是我的范围(并且抛出错误“错误的参数数量(0表示1)”)
。如何强制Rails使用我的范围,而不是Ruby方法?
答案 0 :(得分:2)
在Rails 3中,scope
和class method
基本相同。
我认为您拨打instance method
而不是class method
。
class Foo
scope :open, where(:closed => false)
def open
#instance_method
end
end
# how to call them
Foo.open # scope/class method
Foo.new.open # instance_method
答案 1 :(得分:1)
open
不是ActiveRecord::Base
类上的保留方法名称,因此这应该不是问题。
E.g:
class Post < ActiveRecord::Base
scope :open, :where(:closed => false)
...
end
Post.open
#=> [#<Post id: 1, closed: false>, #<Post id: 5, closed: false>, ... ]
(@ oldergod发布了类似的内容并删除了他的答案。)