Sql Rails中多个关联的高级搜索
我正在尝试为我的候选人模型建立高级搜索引擎。 让我们假设它有两个字段+多个关联,比如Sql Rails中多个关联的高级搜索,sql,ruby-on-rails,activerecord,associations,Sql,Ruby On Rails,Activerecord,Associations,我正在尝试为我的候选人模型建立高级搜索引擎。 让我们假设它有两个字段+多个关联,比如有多个:语言&有多个:技能。现在我正在构建如下查询: query = Candidate.select("*") if position_name query = query.where('position_name LIKE ? OR position_name IS NULL',"%#{position_name}%") end if salary query = query.where('sal
有多个:语言
&有多个:技能
。现在我正在构建如下查询:
query = Candidate.select("*")
if position_name
query = query.where('position_name LIKE ? OR position_name IS NULL',"%#{position_name}%")
end
if salary
query = query.where('salary <= ? OR salary IS NULL',salary)
end
此外,我还希望语言也一样(另外,语言有language.name
和language.level
)
有人能告诉我往哪个方向看吗?以及如何建立这样的条件,使我能够掌握多种技能或多种语言?看看各种搜索宝石,如Ransack、Metawhere或Searchlogic Ransack和Searchlogic都允许在相关模型上进行搜索,您可以使用范围来限制搜索参数 Searchlogic的示例搜索参数
[search][admitted_gte]
[search][admitted_lte]
[search][aetiology_like_any][] VIRUS
[search][at_risk_gte]
[search][at_risk_lte]
[search][died_gte]
[search][died_lte]
[search][gezi_reference_like]
[search][id]
[search][incidents_location_encrypted_postcode_like]
[search][lab_confirmed_gte]
[search][lab_confirmed_lte]
[search][onset_first_after]
[search][onset_first_before]
[search][onset_last_after]
[search][onset_last_before]
[search][outbreak_type_equals_any][] FOODBORNE
[search][point_source_date_after]
[search][point_source_date_before]
[search][total_affected_gte]
[search][total_affected_lte]
[search][user_reference_like]
[search][year_equals_any][] 2010
search[order] descend_by_id
exploration\u Controller.rb Index操作返回搜索查询的结果。从17个搜索参数中,只需要一个searchlogic调用@Search=export.Search(参数[:Search])
。参数在允许的搜索参数列表中被列为白名单-代码未显示
def index
#set the default index order to be descending Outbreak id
if !params[:search][:order]
params[:search][:order] = "descend_by_id"
end
if params[:search][:bacterial_agents_bacterium_name_like_any] != nil && !params[:search][:bacterial_agents_bacterium_name_like_any].empty?
params[:search][:bacterial_agents_category_like] = "CAUSATIVE"
end
if params[:search][:viral_agents_virus_name_like_any] != nil && !params[:search][:viral_agents_virus_name_like_any].empty?
params[:search][:viral_agents_category_like] = "CAUSATIVE"
end
if params[:search][:protozoal_agents_protozoa_name_like_any] != nil && !params[:search][:protozoal_agents_protozoa_name_like_any].empty?
params[:search][:protozoal_agents_category_like] = "CAUSATIVE"
end
if params[:search][:toxic_agents_toxin_name_like_any] != nil && !params[:search][:toxic_agents_toxin_name_like_any].empty?
params[:search][:toxic_agents_category_like] = "CAUSATIVE"
end
#Outbreak.search takes all of the given params and runs it against the Outbreak model and it's associated models
@search = Outbreak.search(params[:search])
end
你可能很想考虑使用一个搜索引擎,因为它让这样的任务变得微不足道,同时也使得搜索变得非常快。谢谢
def index
#set the default index order to be descending Outbreak id
if !params[:search][:order]
params[:search][:order] = "descend_by_id"
end
if params[:search][:bacterial_agents_bacterium_name_like_any] != nil && !params[:search][:bacterial_agents_bacterium_name_like_any].empty?
params[:search][:bacterial_agents_category_like] = "CAUSATIVE"
end
if params[:search][:viral_agents_virus_name_like_any] != nil && !params[:search][:viral_agents_virus_name_like_any].empty?
params[:search][:viral_agents_category_like] = "CAUSATIVE"
end
if params[:search][:protozoal_agents_protozoa_name_like_any] != nil && !params[:search][:protozoal_agents_protozoa_name_like_any].empty?
params[:search][:protozoal_agents_category_like] = "CAUSATIVE"
end
if params[:search][:toxic_agents_toxin_name_like_any] != nil && !params[:search][:toxic_agents_toxin_name_like_any].empty?
params[:search][:toxic_agents_category_like] = "CAUSATIVE"
end
#Outbreak.search takes all of the given params and runs it against the Outbreak model and it's associated models
@search = Outbreak.search(params[:search])
end