Ransack 显示全部而不是过滤器

Ransack showing all instead of filter

我正在尝试使用 Ransack gem 但它 returns 所有 12,000 行而不是使用过滤器。

控制器:

 def list
  @q = LmiHost.ransack(params[:q])
  if !(params[:commit].nil?) then
   @computers = @q.result
  else
   @computers = LmiHost.where(:job_id => 121)
  end
 end

查看:

<script type="text/javascript">
 $(document).ready(function() {
  $("#computer_search_results").dataTable();
});
</script>

<table id="computer_search_table">
 <%= search_form_for @q do |f| %>
 <tr><td>Project:</td><td><%= f.select :job_id, @project_job_selector %></td></tr>
 <tr><td><%= f.submit 'Search' %></td></tr>
 <%end%>
</table>


<table id="computer_search_results">
 <thead>
  <tr>
   <th>Lmi Name</th>
   <th>Service Tag</th>
   <th>Model</th>
   <th>Ship Date</th>
   <th>Warranty Date</th>
   <th>Project</th>
   <th>Invoice Name</th>
  </tr>
 </thead>
 <tbody>
  <% @computers.each do |computer| %>
  <tr>
   <td><%= computer.host_description %></td>
   <td><%= computer.host_service_tag %></td>
   <td><%= computer.host_model %></td>
   <td><%= computer.ship_date %></td>
   <td><%= computer.warranty_date %></td>
   <td><%= computer.job.name unless computer.job.nil? %></td>
   <td><%= computer.invoice_name %></td>
  </tr>
  <% end %>
 </tbody>
</table>

搜索后 URL 看起来没问题: URL

但它的表现就像:

@computers = LmiHost.all

关于为什么会发生这种情况的任何想法?

你做错的是你没有指定合适的匹配器。如果您想要 select 特定的工作 ID,您应该在表单中指明搜索匹配器。

例如,您说 job_id 它应该在什么地方 job_id_eq 或者您希望它成为什么匹配器

你应该在哪里 getter 像下面这样的 Ransack Search 项目。

Ransack::Search<class: LmiHost, base: Grouping <conditions: [Condition <attributes: ["job_id"], predicate: eq, values: ["123"]>], combinator: and>> 

在你的 Ransack 搜索中,我没有看到谓词,因此它 returns 所有结果。