Rails——在地理编码搜索之上构建一个过滤器



我目前正在使用地理编码器来过滤图像,除此之外,我想添加一个类别过滤器(不是下拉选择类型,但每个类别都会像按钮一样显示,当我单击它时,它的category_id会被选中)。

想象一下,一个侧栏列出了我的所有类别,还有一个位置搜索输入框。

这就是我到目前为止所拥有的。

#index.html.erb
<%= form_tag images_path, :method => :get do %>
<p> Location<br>
<%= text_field_tag :search, params[:search] %>
<% submit_tag "Search", :name => nil %>
</p>
<% end %>
<% @categories.each do |cat| %>
<%= link_to cat.name %> #then i don't know what to do to get the cat.id link back to the controller
<% end %>
<% @images.each do |image| %> 
<%= image_tag image.picture.url %>  
<% end %>
I have the location filter form and below that, it lists out the appropriate images.

# imagescontroller
def index
#@categories = Category.all
if params[:search].present?
@users = User.near(params[:search], 50, :select => "users.*, images.*").joins(:images)
@images = Image.joins(:categories).where(categories: { id: 3 }).joins(:users).merge(@users).distinct
else
@images = Image.joins(:categories).where(categories: { id: 3 }) 
end
end

正如上面的代码所示,我将类别硬编码为第三个类别,但当我输入位置时,代码确实成功运行。

背景故事:

  • 每个图像可以有许多用户,每个用户可以有许多图像
  • 每个用户都有一个地址,我使用地理编码来查找用户在某个位置附近的图像
  • 每个图像具有许多类别,并且每个类别具有许多图像
  • 只有五类

现在的问题是:我如何制作类别表单,以便用户可以选择类别,而不是我对其进行硬编码。我希望在不刷新页面的情况下加载页面。我对jQuery和Ajax知之甚少,但我愿意深入研究,我确实需要一些指导。

感谢任何解决方案、建议或指导:)

我找到了解决方案!我可以像这个一样链接视图

<li><%= link_to "categoryname1", images_path(category: 'category name", search: params[:search]) %> </li>

关键是还要在列表中添加搜索参数以及

在图像控制器中,我编辑了代码。我在控制器中使用if-else语句来根据不同的情况获得不同的结果(即,如果搜索和类别参数都存在…)

category = Category.where('lower(name) = ?', params[:category].downcase).first
category_id = category.id unless category.nil?
@images = Image.joins(:categories).where(categories: { id: category_id })

最新更新