【问题标题】:Is "taken" a keyword in ruby?“taken”是红宝石中的关键字吗?
【发布时间】:2012-11-11 14:14:42
【问题描述】:

直奔问题。 我有一个这样的查询:

@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 是 ruby​​ 中的关键字吗?如果没有,谁能解释这种行为?

【问题讨论】:

  • 是否在您的模型中定义了任何名为 taken 的函数,尤其是 issue_book.rb?
  • @AnandVeeramani no man 我知道这件事我没有在issue_books中定义任何东西

标签: ruby-on-rails ruby lambda named-scope


【解决方案1】:

它不是 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::SelectorManagerlimit 的别名,是ActiveRecord 的依赖项。

【讨论】:

  • 我现在记得是的,它是 taken 的别名,谢谢你提醒我
猜你喜欢
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 2019-10-31
  • 2019-08-09
  • 1970-01-01
相关资源
最近更新 更多