2

プロジェクトでRails 3.2.8を使用しており、「open」という名前のスコープを使用したい

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

JSONで送信するため。のようなものjson.open @foo.bar.open.count。しかし、Rails は.openRuby メソッド (開いているファイルに関連していると思われます) として認識し、私のスコープとしては認識しません (そして、「引数の数が間違っています (1 に対して 0)」というエラーがスローされます)。Rubyメソッドではなく、Railsにスコープを使用させるにはどうすればよいですか?

4

2 に答える 2

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
于 2012-11-29T09:30:44.347 に答える
1

openActiveRecord::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 に答える