Ruby on rails 是";“采取行动”;ruby中的关键字?
直截了当地问。 我有这样一个问题:Ruby on rails 是";“采取行动”;ruby中的关键字?,ruby-on-rails,ruby,lambda,named-scope,Ruby On Rails,Ruby,Lambda,Named Scope,直截了当地问。 我有这样一个问题: @issue_books = current_user.issue_books @already_issues = @issue_books.taken(params[:id]) 其中,take是一个命名范围,定义如下: scope :taken, lambda { |book_id| where(returned: false).where(book_id: book_id) } 现在,每次我运行此查询时: @issue_books.taken(pa
@issue_books = current_user.issue_books
@already_issues = @issue_books.taken(params[:id])
其中,take
是一个命名范围,定义如下:
scope :taken, lambda { |book_id| where(returned: false).where(book_id: book_id) }
现在,每次我运行此查询时:
@issue_books.taken(params[:id])
我得到一个ArgumentError:参数数目错误(1代表0)
error
如果我将taked
重命名为类似taked\u books
的其他名称,一切似乎都正常
所以我的问题是:
在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
因此,您定义的范围可能被ActiveRecord::Delegate
中的定义所掩盖
更新:
我做了一些挖掘工作,take
似乎被定义为limit
的别名,在Arel::SelectorManager
中,ActiveRecord
的依赖项定义了模型中名为take
的任何函数,esp issue_book.rb?@AnandVeeramani没有人我知道这件事我在issue_book
中没有定义任何东西我现在记得是的它取了的别名
谢谢你提醒我