我想得到所有与查询匹配的记录,我得到多个参数并将它们保存在查询中
query = Hash.new
query[:user_id] = params["user_id"] if query["user_id"]
query[:vehicle] = params["vehicle_id"] if query["vehicle_id"]
trips = Trip.where(query)
我还想添加params['created_at]
如果这些参数存在但不知道怎么做
答案 0 :(得分:1)
您可以为Trip模型添加范围。
scope :created_after, ->(time) { where("created_at > ?", time) if time }
然后将它链接起来:
Trip.created_after(params["created_at"]).where(query)
不是最优雅,但它会起作用。如果" created_at"不是在参数中,它将是零,只会返回所有行程。
答案 1 :(得分:0)
只是为了好玩并且匆匆离开Paul Byrne和this Q&A提供的答案,或许类似于:
params.slice(:user_id, :vehicle_id).compact.
each_with_object(Trip.created_after(params[:created_at])) do |(key, value), scope|
scope.merge(Trip.send(key, value))
end