【发布时间】:2014-10-28 15:15:07
【问题描述】:
从我所读到的,在 Rails 中使用范围更有效,因为您直接查询模型而不是通过控制器到达模型的实例变量(我是这么看的?)
所以我的控制器中有这个查询
@animal_location = User.select(:town).map(&:town).uniq
["Cardiff", "Newport"]
然后是我的模型中的这个范围
scope :uniq_towns, ->() {
select("town").group("town")
}
#<ActiveRecord::Relation [#<User id: nil, town: "Cardiff">, #<User id: nil, town: "Newport">]>
在我看来,使用@animal_location = User.select(:town).map(&:town).uniq 访问城镇价值我可以像访问一样
<% @animal_location.each do |loc| %>
<%= loc %>
<% end %>
或者如果我使用范围并使用@animal_location = User.uniq_towns,在我看来我会使用
<% @animal_location.each do |loc| %>
<%= loc.town %>
<% end %>
我的第一个问题是我的范围在这种情况下会更快吗,其次我的范围是否正确,因为我正在获取 User id: nil 作为哈希的一部分
谢谢
【问题讨论】:
-
我不认为作用域查询比常规查询更有效。他们只是在需要时需要更少的打字。
标签: ruby-on-rails activerecord ruby-on-rails-4 named-scope