Rails - 显示一组结果的最佳方式

时间:2017-10-12 13:08:22

标签: ruby-on-rails

我有一个酒店模型,模型有一个位置字段。

我希望能够过滤酒店,以便按位置显示用户搜索的结果。

e.g。当用户搜索“马德里”时,该页面将重定向到马德里的酒店列表。

最简单的方法是做什么?

谢谢。

2 个答案:

答案 0 :(得分:1)

最简单的解决方案是按城市查询数据库过滤:

city_hotels = Hotel.where(city: params[:city])

答案 1 :(得分:1)

我建议只使用where子句。类似的东西:

Hotel.where(location: 'Madrid')

由于这会映射到SQL SELECT语句,因此它会让您的数据库在检索数据之前完成工作,它会为您提供一组要处理的对象。如果您有多个条件,那么可以使用字符串设置将它们串在一起,如:

Hotel.where('location LIKE ? AND name LIKE ?', '%Madrid%', '%Hilton%')

这将使您可以灵活地创建自己的查询,而不会对API服务器施加太大压力。例如,如果您使用allfindAllBy,则Rails会将所有酒店加载到API层,然后单独检查每个酒店(需要处理时间和CPU)。但是,在这些情况下使用where会使数据库(旨在执行这些类型的查询)处理最小化API CPU使用率的工作,以便更多人的API请求可以通过。< / p>

作为旁注,如果你正在处理一个很少变化的查询(比如城市附近的所有酒店),那么考虑缓存答案以节省处理时间可能是值得的。例如,酒店不会在一夜之间出现,因此在马德里停留一段时间(如4-8小时)的酒店列表意味着您只需处理一次请求。