Rails使用select下拉列逐行过滤

时间:2013-10-03 10:16:57

标签: ruby-on-rails ruby filtering categories

我正在制作一个旅游度假应用程序。搜索地点取决于选择下拉列表中的类别。

但我无法理解程序逻辑。我能够在数据库中加载内容。但不能根据某些类别进行过滤。 我做了一个名为列表的脚手架,并包含了一些参数。 在数据库中,它有一列5列,即地点描述 image_url 价格类别即可。

现在,如果我创建另一个控制器搜索,我将无法根据选择下拉列表中的类别加载行。

Search_controller.rb

def index
    @categories = Listing.find_by_sql("SELECT category FROM listings GROUP BY category").map &:category
    @list = params[:category].blank? ? Listing.all : Listing.find_all_by_category(params[:category])
  end

index.html.erb

<% form_tag(:action => :index) do %>
  <%= select_tag "category", options_for_select(@categories) %>
  <%= submit_tag "Filter" %>
<% end %>

<table>
  <% @list.each do |list| %>
    <tr>
      <td><%= list.place %></td>
    </tr>
  <% end %>
</table>

它不显示选择选项。

另外,我尝试在没有选择表单的情况下执行此操作

Search_controller.rb

def index
    @list = Listing.select(:category).map(&:category).uniq
end

Index.html.erb

<% @list.each do |r| %>
<%= r.place %>
<% end %>

它说:未定义的方法`place'为“sunny”:String (其中“sunny”是一个类别)

基本上,如何根据某个列值获取行。并且,逻辑是否也适用于两个选择下拉菜单?

我知道我很亲密,但有些事情不对。请帮助我

非常感谢。

1 个答案:

答案 0 :(得分:0)

你缺少= form_tag之前。应该是:

<%= form_tag(:action => :index) do %>
  <%= select_tag "category", options_for_select(@categories) %>
  <%= submit_tag "Filter" %>
<% end %>