Ruby on rails Rails-根据查询字符串中的参数数获取结果
我正在处理一个事件应用程序,在该应用程序中,我希望根据查询字符串中的3个参数位置过滤事件,或者在处开始或结束事件。查询字符串中可以有任何一个、两个或所有参数。在我使用if-else语句时,我需要编写6个案例,这将使我的代码变得笨拙。相反,我正在考虑以这种方式实施一些事情:Ruby on rails Rails-根据查询字符串中的参数数获取结果,ruby-on-rails,activerecord,query-string,Ruby On Rails,Activerecord,Query String,我正在处理一个事件应用程序,在该应用程序中,我希望根据查询字符串中的3个参数位置过滤事件,或者在处开始或结束事件。查询字符串中可以有任何一个、两个或所有参数。在我使用if-else语句时,我需要编写6个案例,这将使我的代码变得笨拙。相反,我正在考虑以这种方式实施一些事情: class EventsController < ApplicationController def index unless params.empty? unless params[:locat
class EventsController < ApplicationController
def index
unless params.empty?
unless params[:location].nil?
@events = Event.where("location = ?", params[:location])
end
unless params[:starts_at].nil?
unless @events.empty?
@events = @events.where("start_date = ?", params[:start_date])
else
@events = Event.where("Date(starts_at) = Date(?)", params[:starts_at])
end
end
unless params[:ends_at].nil?
unless @events.empty?
@events = @events.where("end_date = ?", params[:end_date])
else
@events = Event.where("Date(ends_at) = Date(?)", params[:ends_at])
end
end
end
end
end
类事件控制器
但这段代码不起作用,因为其中查询在数组上不起作用。有人能为我推荐一些解决方案吗?试试下面的方法
def index
unless params.empty?
where_array, arr = [], []
if params[:location]
where_array << "location = ?"
arr << params[:location]
end
if params[:starts_at]
where_array << "start_date = ?"
arr << params[:starts_at]
end
if params[:ends_at]
where_array << "end_date = ?"
arr << params[:ends_at]
end
@events = arr.blank? ? [] : Event.where([where_array.join(" AND "), *arr])
end
end
def索引
除非参数为空?
其中_数组,arr=[],[]
如果参数[:位置]
其中_array您应该能够将参数
散列直接传递到where
,它将基于该散列的键和值形成正确的SQL:
Event.where(params)
控制台中的一个示例:
1.9.3p194 :001 > puts Example.where(:location => 'here', :started_at => '2012-08-13').to_sql
SELECT "examples".* FROM "examples" WHERE "examples"."location" = 'here' AND "examples"."started_at" = '2012-08-13'