我正在制作一个旅游度假应用程序。搜索地点取决于选择下拉列表中的类别。
但我无法理解程序逻辑。我能够在数据库中加载内容。但不能根据某些类别进行过滤。 我做了一个名为列表的脚手架,并包含了一些参数。 在数据库中,它有一列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”是一个类别)
基本上,如何根据某个列值获取行。并且,逻辑是否也适用于两个选择下拉菜单?
我知道我很亲密,但有些事情不对。请帮助我
非常感谢。
答案 0 :(得分:0)
你缺少= form_tag之前。应该是:
<%= form_tag(:action => :index) do %>
<%= select_tag "category", options_for_select(@categories) %>
<%= submit_tag "Filter" %>
<% end %>