Ruby on Rails:如何使用名为'open'的范围?

时间:2012-11-29 09:26:02

标签: ruby-on-rails ruby ruby-on-rails-3 scope ruby-on-rails-3.2

我在项目中使用Rails 3.2.8,我想使用名为'open'的范围

scope :open, where(:closed => false)

以便使用JSON发送它。像json.open @foo.bar.open.count这样的东西。但是Rails将.open识别为Ruby方法(我认为与打开文件相关),而不是我的范围(并且抛出错误“错误的参数数量(0表示1)”) 。如何强制Rails使用我的范围,而不是Ruby方法?

2 个答案:

答案 0 :(得分:2)

在Rails 3中,scopeclass 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发布了类似的内容并删除了他的答案。)