【问题标题】:Drop Down Search Results Filter in RailsRails 中的下拉搜索结果过滤器
【发布时间】:2023-03-14 16:53:01
【问题描述】:

我是 Rails 新手,正在尝试通过下拉菜单过滤搜索结果。下拉列表是biketype(即'Road'、'Mountain'),它是自行车模型的一个属性。然后我也想按价格排序。

我的索引视图:

<% form_tag(bikes_path, :method => :get) do %>
<%= select_tag( :biketype, options_for_select(Bike::BIKETYPES) )%>
<%= submit_tag "Submit" %>
<% end %>

还有我用于基于位置的搜索的 bikes_controller(使用地理编码器):

   def index 
     @title = "Bikes"
       if params[:search].present?
         @bikes = Bike.near(params[:search], 50, :order => :distance).paginate(:page => params[:page], :per_page => 9)
       else
         @bikes = Bike.paginate(:page => params[:page], :per_page => 9)
       end
   end

如果您对如何更新我的控制器和模型以获取过滤器和排序有任何建议,那就太好了。我被推荐了范围,但不确定如何实现它们。非常感谢,威尔。

【问题讨论】:

  • 只是好奇,你还记得Bike::BIKETYPES 是在哪里以及如何定义的吗?我也在尝试添加一个下拉列表来过滤搜索结果。

标签: ruby-on-rails search filter scope drop-down-menu


【解决方案1】:
class BikesController < ApplicationsController

   def index 
     @title = "Bikes"
     @bikes = Bike.near_search(params[:search]).\
                paginate(:page => params[:page], :per_page => 9)

   end
end


class Bike  

  def self.near_search(params)
    if params
      near(params, 50, :order => :distance)
    else
      all
    end
  end

end

【讨论】:

  • 很好的重构。但是您知道如何将上述下拉表单实现为自行车索引上的 :biketype 属性过滤器吗?谢谢!
  • 我看不到您的其余代码,但您可以通过创建 *scope^ 的常量进行迭代。 class_eval 做; BIKETYPES.each 做 |b|;范围 b.to_sym, where(:type, b);结束。
  • 您可以使用order('price DESC')按价格对集合进行排序
  • 所以范围将在自行车模型中,但是您如何使用下拉菜单调用它?我的观点正确吗?模型中的 order('price' DESC') 是否也是如此?对不起,第一次使用范围。感谢您的帮助!
猜你喜欢
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
相关资源
最近更新 更多