过滤控制器中的参数



我有一个有很多参数的过滤器,我会知道在我的控制器中编写它的最佳方式,我的条件有效,但单独我想知道编写它的好方法,并使其与我的所有参数一起使用,创建 9999 条件,如"params.present?&&&params.present?等等..."

我的控制器:

if params[:room_type].present?
@biens = Bien.where(room_type: params[:room_type])
elsif params[:nb_piece].present?
@biens = Bien.where(nb_piece: params[:nb_piece])
elsif params[:nb_piece].present? && params[:room_type].present?
@biens = Bien.where(nb_piece: params[:nb_piece], room_type: params[:room_type])
elsif params[:location].present?
@biens = Bien.near(params[:location], 1, units: :km)
elsif params[:nb_piece].present? && params[:room_type].present?
@biens = Bien.where(nb_piece: params[:nb_piece]) && Bien.where(room_type: params[:room_type])
elsif params[:start_date].present? && params[:end_date].present?
@biens = Bien.where(compromis_date: Date.parse(params[:start_date])..Date.parse(params[:end_date]))
elsif params[:start_price].present? && params[:end_price].present?
@biens = Bien.where(prix: params[:start_price]..params[:end_price])
elsif params[:negociateur].present?
@biens = Bien.where(negociateur: params[:negociateur])
else
@biens = Bien.all
end

我相信下面的解决方案会适合你。我还没有测试过它,但类似的东西应该可以工作。请尝试一下,如果您对此有任何疑问,请在评论中告诉我。

params.each do|key, value|
next if params[key.to_sym].blank?
@biens = Bien.where(key.to_sym => value)
break
end
if @biens.blank?
@biens = Bien.all
end

最新更新