【发布时间】:2016-07-07 01:36:15
【问题描述】:
我的应用中有两个主要模型,“业务”和“类别”。我目前有一个可以正常工作的搜索 text_field,但我也在尝试实现让用户根据包含可用类别的 collection_select 搜索“属于_to”某个类别的企业的功能。
我的 collection_select 工作正常,但我似乎不知道如何让它显示“属于”所选类别的企业。
这是我的业务控制器中的搜索信息:
def search
if params[:search].present?
@businesses = Business.search(params[:search])
else
@businesses = Business.all.paginate(page: params[:page], per_page: 6)
end
end
我的搜索表单:
<%= form_tag search_businesses_path, method: :get, role: "search", :class => "search" do %>
<%= label :category, "Search By Business Name" %>
<%= text_field_tag :search, params[:search], id: "search", :placeholder => 'Search Business' %>
<%= button_tag(type: 'submit', class: "button") do %>
<i class="fa fa-arrow-right"></i>
<% end %>
<% end %>
以及我当前的类别集合选择:
<%= form_for :category do |f| %>
<%= f.label :category, "Search By Category" %><br>
<%= f.collection_select :category_id, Category.all.order('name ASC'), :id, :name %>
<%= button_tag(type: 'submit', class: "button") do %>
<i class="fa fa-arrow-right"></i>
<% end %>
<% end %>
我知道我需要告诉集合选择它需要显示业务,但我似乎无法弄清楚如何正确实现它。
更新
我尝试了以下代码,没有出现结果:
我的商业模式
def search_data
{
name: name,
category_id: category_id
}
end
我的业务主管
def search
if params[:search].present?
@businesses = Business.search "apples", where: { category_id: params[:category_id] }
else
@businesses = Business.all.paginate(page: params[:page], per_page: 6)
end
end
我的表格
<%= form_tag search_businesses_path, method: :get, role: "search", :class => "search" do %>
<%= label :category, "Search By Category" %>
<%= collection_select :search, params[:category_id], Category.all.order('name ASC'), :id, :name %>
<%= button_tag(type: 'submit', class: "button") do %>
<i class="fa fa-arrow-right"></i>
<% end %>
<% end %>
【问题讨论】:
-
你检查
params了吗?params[:category_id]存在吗?或者它来自params[:search]?只需检查并发布您收到的params。 -
所以你说将参数更改为
<%= collection_select :search, params[:search], Category.all.order('name ASC'), :id, :name %>这也没有显示任何结果。 -
在玩了之后,我基本上能够让正确的商家出现,但有些类别在顶部显示了正确的商家,然后在下面列出了其他几个商家。我能做到这一点的唯一方法是保持
Business.search(params[:search])的原样并像这样显示我的表单<%= collection_select :search, params[:category_id], Category.all.order('name ASC'), :id, :name %>否则什么都不会显示。 -
我猜你不清楚
form和params。您正在朝着正确的方向前进,但对此稍有了解将有助于您达到目标。阅读params以及它们是如何创建的。 -
是的,我对 Rails 还很陌生。这是我除了书籍教程之外的第一个真正的项目。感谢您的洞察力。我会仔细阅读。
标签: ruby-on-rails ruby searchkick collection-select