直接进入问题。 我有这样的查询:
@issue_books = current_user.issue_books
@already_issues = @issue_books.taken(params[:id])
其中 taken
是一个命名范围,定义如下:
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
是 ruby 中的关键字吗?如果没有,谁能解释这种行为?
最佳答案
它不是 ruby 关键字,但它似乎是在作用域上定义的方法。
试试这个:
@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
中的定义所掩盖。
更新:
我做了一些挖掘,taken
似乎被定义为 Arel::SelectorManager
中 limit
的别名,ActiveRecord 的依赖项
。
关于ruby-on-rails - "taken"是 ruby 中的关键字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13331903/