2

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

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

为了用 JSON 发送它。类似的东西json.open @foo.bar.open.count。但是 Rails 将其识别.open为 Ruby 方法(我猜与打开的文件有关),而不是我的范围(并抛出错误 "wrong number of arguments (0 for 1)")。如何强制 Rails 使用我的范围,而不是 Ruby 方法?

4

2 回答 2

2

在 Rails 3 中,scopeclass method基本上是一回事。

我认为您正在调用 theinstance 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
于 2012-11-29T09:30:44.347 回答
1

open不是ActiveRecord::Base class上的保留方法名称,所以这应该不是问题。

例如:

class Post < ActiveRecord::Base
  scope :open, :where(:closed => false)
  ...
end

Post.open
#=> [#<Post id: 1, closed: false>, #<Post id: 5, closed: false>, ... ]

(@oldergod 发布了类似的内容并删除了他的答案。)

于 2012-11-29T09:38:47.797 回答