根据我在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 %>
我的第一个问题是,在这种情况下,我的范围会更快吗?其次,当我获得用户ID:nil作为哈希的一部分时,我的范围是否正确?>
谢谢
根据我在Rails中使用范围所读的内容,效率更高,因为您直接查询模型,而不是通过控制器到达模型的实例变量(这就是我的看法?)...
这取决于您的来源所指的“有效”。范围的目的是使代码保持DRY(“不要重复自己”),并为ActiveRecord(AR)查询实现“提取方法”重构模式。它们易于维护。
为什么使用它?如果您在多个地方使用相同的查询,请考虑需要在任何地方进行更改的情况。您必须查找并替换所有出现的事件。这种方式容易出错,并且会导致版本控制中出现更多差异,而这些差异很难跟踪。