Ruby on rails 如何使用Searchkick实现这一点?
我的Rails应用程序中有一个模型过滤系统。目前它只是根据参数进行过滤。我想尝试重做它,但使用Searchkick 我被困的地方是我的号码和字母过滤。目前,这是通过以下方式实现的:Ruby on rails 如何使用Searchkick实现这一点?,ruby-on-rails,searchkick,Ruby On Rails,Searchkick,我的Rails应用程序中有一个模型过滤系统。目前它只是根据参数进行过滤。我想尝试重做它,但使用Searchkick 我被困的地方是我的号码和字母过滤。目前,这是通过以下方式实现的: if params[:letter] letter = params[:letter] if letter == "numbers" conditions = (0..9).to_a.map{ |number| " car_sort = '#{n
if params[:letter]
letter = params[:letter]
if letter == "numbers"
conditions = (0..9).to_a.map{ |number| " car_sort = '#{number}' " }.join('OR')
else
# If single letter
if params[:letter] =~ /^[a-zA-Z]$/
letter = params[:letter]
conditions = " car_sort = '#{letter}' "
# If range of letters
else
letter = letter.split('-')
letter = (letter[0]..letter[1]).to_a
conditions = letter.map{ |letter| " car_sort = '#{letter}' " }.join('OR')
end
end
@cars = @cars.where(conditions)
我希望将其转换为Searchkick,但我一直在思考如何管理它。这就是我到目前为止所做的:
where = {}
where[:material] = params[:material] if params[:material]
if params[:letter]
letter = params[:letter]
if letter == "numbers"
where[:_or] = [{ name: { prefix: 0 } }, { name: { prefix: 1 } }, { name: { prefix: 2 } }, { name: { prefix: 3 } }, { name: { prefix: 4 } }, { name: { prefix: 5 } }, { name: { prefix: 6 } }, { name: { prefix: 7 } }, { name: { prefix: 8 } }, { name: { prefix: 9 } }]
end
end
order = {order_ridden: :desc} # Defsult ordering by the "order_ridden" attribute of Car
if params[:sort] == 'order'
@cars = Car.originals.search params[:q].presence || "*", where: where, order: order, load: true
else
@cars = Car.latest.search params[:q].presence || "*", where: where, order: order, load: true
end
有什么想法吗
尼尔