【发布时间】:2011-10-16 01:57:03
【问题描述】:
我正在从 rails jquery 自动完成插件中查看这段代码。在第 12 行中,“items”被设置为一个作用域对象。然后在接下来的几行中,作用域对象似乎被重新分配了几次。
当我运行代码时,似乎只进行了 1 个查询,这是所有范围的总和。(这很好,只是不知道为什么)。这是否意味着作用域对象在执行时会累积作用域直到方法结束?或者 Active Record 只是通过等待收集所有查询来最小化所需的查询数量来优化性能...帮助我理解:) :
def get_autocomplete_items(parameters)
model = parameters[:model]
term = parameters[:term]
method = parameters[:method]
options = parameters[:options]
scopes = Array(options[:scopes])
limit = get_autocomplete_limit(options)
order = get_autocomplete_order(method, options, model)
items = model.scoped
scopes.each { |scope| items = items.send(scope) } unless scopes.empty?
items = items.select(get_autocomplete_select_clause(model, method, options)) unless options[:full_model]
items = items.where(get_autocomplete_where_clause(model, term, method, options)).
limit(limit).order(order)
end
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 scope