首页 > 解决方案 > 在 Rails 中查找具有多个列名的记录

问题描述

我有一张桌子,它与这样的活动商店Offer有一个依赖关系:OfferDescription

t.boolean "discovery", default: false
t.boolean "meeting_animals", default: false
t.boolean "milking_animals", default: false
t.boolean "tasting", default: false
t.boolean "birth_animal", default: false
t.boolean "stroll", default: false
t.boolean "harvest", default: false
t.boolean "craft", default: false

我的用户可以按活动搜索优惠,当他们只选择一项活动时就可以了,我做了这样的请求

activity = params[:activity].gsub(/'/, '')

.joins(:address, :offer_description)
.where("max_people_count >= ? AND offer_descriptions.#{activity}=?", peopleCount, true)
.near(location, distance, unit: :km)

但是,当他们选择多个活动以查找具有此活动或另一个活动的优惠时,我该如何正确地做呢?

桌子的制作方式OfferDescription对我来说有点奇怪

标签: ruby-on-railsrubypostgresqlactiverecord

解决方案


一种解决方案可以是

我假设对于多个活动,我们会将它放在一个数组中。

activities = ['discovery', 'meeting_animals']
activity_query = activities.each_with_object([]).do |activity, query|
  query << "offer_descriptions.#{activity} = :flag"
end.join(" OR ")

.joins(:address, :offer_description)
.where("max_people_count >= ? AND " + activity_query, 
       peopleCount, flag: true)
.near(location, distance, unit: :km)

推荐阅读