2

質問にまっすぐ。次のようなクエリがあります。

@issue_books = current_user.issue_books
@already_issues =  @issue_books.taken(params[:id])

ここtakenで、以下のように定義された named_scope です。

scope :taken, lambda { |book_id| where(returned: false).where(book_id: book_id)  }

今、私はこのクエリを実行するたびに:

@issue_books.taken(params[:id]) 

ArgumentError: wrong number of arguments (1 for 0)エラーが発生します。

のような別の名前に変更すると、すべて正常に動作するtakenようですtaken_books

だから私の質問は:takenルビーのキーワードですか? そうでない場合、誰かがこの動作を説明できますか?

4

1 に答える 1

6

ルビのキーワードではありませんが、スコープで定義されたメソッドのようです。

これを試して:

@issue_books.method(:taken).owner
#=> ActiveRecord::Delegation
@issue_books.method(:taken).source_location
#=> (...)/gems/activerecord-3.2.6/lib/active_record/relation/delegation.rb

したがって、定義したスコープtakenは、おそらく の定義によって隠されていますActiveRecord::Delegate

更新:私はいくつかの掘り下げを行い、 の依存関係であるintakenのエイリアスとして定義されているようです。limitArel::SelectorManagerActiveRecord

于 2012-11-11T14:26:03.180 に答える