在 Rails 中查找具有多个列名的记录
Find records with multible column name in Rails
我 table 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
我的用户可以按活动搜索优惠,当他们 select 只有一个时没问题 activity 我是这样请求的
activity = params[:activity].gsub(/'/, '')
.joins(:address, :offer_description)
.where("max_people_count >= ? AND offer_descriptions.#{activity}=?", peopleCount, true)
.near(location, distance, unit: :km)
但是,当他们 select 进行多项活动以查找具有此 activity 或另一个的报价时,我该如何正确地做?
OfferDescription
table 的制作方式对我来说有点奇怪
一个解决方案可以是
我假设对于多个活动,我们会在一个数组中获取它。
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)
我 table 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
我的用户可以按活动搜索优惠,当他们 select 只有一个时没问题 activity 我是这样请求的
activity = params[:activity].gsub(/'/, '')
.joins(:address, :offer_description)
.where("max_people_count >= ? AND offer_descriptions.#{activity}=?", peopleCount, true)
.near(location, distance, unit: :km)
但是,当他们 select 进行多项活动以查找具有此 activity 或另一个的报价时,我该如何正确地做?
OfferDescription
table 的制作方式对我来说有点奇怪
一个解决方案可以是
我假设对于多个活动,我们会在一个数组中获取它。
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)