【问题标题】:How can I search for a belongs_to using searchkick gem using collection_select?如何使用collection_select 使用searchkick gem 搜索belongs_to?
【发布时间】: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
  • 所以你说将参数更改为&lt;%= collection_select :search, params[:search], Category.all.order('name ASC'), :id, :name %&gt; 这也没有显示任何结果。
  • 在玩了之后,我基本上能够让正确的商家出现,但有些类别在顶部显示了正确的商家,然后在下面列出了其他几个商家。我能做到这一点的唯一方法是保持 Business.search(params[:search]) 的原样并像这样显示我的表单 &lt;%= collection_select :search, params[:category_id], Category.all.order('name ASC'), :id, :name %&gt; 否则什么都不会显示。
  • 我猜你不清楚formparams。您正在朝着正确的方向前进,但对此稍有了解将有助于您达到目标。阅读params 以及它们是如何创建的。
  • 是的,我对 Rails 还很陌生。这是我除了书籍教程之外的第一个真正的项目。感谢您的洞察力。我会仔细阅读。

标签: ruby-on-rails ruby searchkick collection-select


【解决方案1】:

这对你有用吗:

Business 模型中定义这个方法:

def search_data
  {
    name: name,
    category_id: category_id
  }
end

或者我认为你也可以这样写(不确定):category: category.name

所以这也将索引category,然后您可以在控制器中使用它进行搜索,如下所示:

Business.search "apples", where: { category_id: params[:category_id] }

或者如果category.name 有效,那么{ category: params[:category] }

根据你的form更改params

【讨论】:

  • 我已经用几种不同的方式尝试了你的建议,但要么没有结果,要么出现了一些看似随机的结果。
猜你喜欢
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多