gpt4 book ai didi

ruby-on-rails - Rails/MongoDb 搜索和优化搜索实现

转载 作者:可可西里 更新时间:2023-11-01 10:44:03 24 4
gpt4 key购买 nike

我的应用程序中有一个搜索功能,其工作方式如下

  1. 主页:用户从下拉列表中选择位置,然后输入搜索关键字并搜索以获得一组结果
  2. 搜索页面(优化搜索选项):一旦用户从上方点击此页面,他将获得更多选项来优化搜索并缩小结果范围。

现在我们正在实现如下,但我假设随着参数增加超过 5-7,组合的数量也会增加 if-else-elseif 语句的数量。

#refine search
@search = params[:search]


if params[:city].present? && params[:location_ids].present? && params[:search].blank?
@blood_banks = BloodBank.where(
{ :city_id => "#{@city}" }).where(
{ :location_id.in => params[:location_ids] })
elsif params[:search].present? && params[:location_ids].blank?
@blood_banks = BloodBank.where(
{ :bb_name => /#@search/i })
elsif params[:search].present? && params[:city].present? && params[:location_ids].present?
@blood_banks = BloodBank.where(
{ :city_id => "#{@city}" }).where(
{ :location_id.in => params[:location_ids] }).where(
{ :bb_name => /#@search/i })
end

哪个是实现相同目标的最佳方式。

你如何实现下面的代码,

if params[:gender].present?
if params[:gender] == "male"
@doctors = Doctor.where( :gender => "Male")
end
if params[:gender] == "female"
@doctors = Doctor.where( :gender => "Female")
end
if params[:gender] == "any"
@doctors = Doctor.where( :gender => "Male") || Doctor.where( :gender => "Female")
end
end

最佳答案

Mongoid 的 where 返回一个 Mongoid::Criteria 并且 Mongoid::Criteria 通过返回另一个响应 where Mongoid::Criteria。这意味着您可以逐个构建查询:

@blood_banks = BloodBank.all
if params[:city].present?
@blood_banks = @blood_banks.where(:city_id => params[:city])
end
if params[:location_ids].present?
@blood_banks = @blood_banks.where(:location_id.in => params[:location_ids])
end
...

就第二部分而言,如果您要搜索任何性别,则完全忽略它,然后您可以执行以下操作:

@doctors = Doctor.all
genders = { 'male' => 'Male', 'female' => 'Female' }
if genders.has_key? params[:gender]
@doctors = @doctors.where(:gender => genders[params[:gender]]
end

搜索任何性别都是相同的,根本不会过滤性别,因此 nil'all' 情况是相同的。然后您可以使用一个简单的查找表处理输入和 :gender 值。

关于ruby-on-rails - Rails/MongoDb 搜索和优化搜索实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20769428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com