我有一个酒店模型,模型有一个位置字段。
我希望能够过滤酒店,以便按位置显示用户搜索的结果。
e.g。当用户搜索“马德里”时,该页面将重定向到马德里的酒店列表。
最简单的方法是做什么?
谢谢。
答案 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服务器施加太大压力。例如,如果您使用all
或findAllBy
,则Rails会将所有酒店加载到API层,然后单独检查每个酒店(需要处理时间和CPU)。但是,在这些情况下使用where
会使数据库(旨在执行这些类型的查询)处理最小化API CPU使用率的工作,以便更多人的API请求可以通过。< / p>
作为旁注,如果你正在处理一个很少变化的查询(比如城市附近的所有酒店),那么考虑缓存答案以节省处理时间可能是值得的。例如,酒店不会在一夜之间出现,因此在马德里停留一段时间(如4-8小时)的酒店列表意味着您只需处理一次请求。