【问题标题】:Rails Ransack - How to search multiple valuesRails Ransack - 如何搜索多个值
【发布时间】:2013-11-07 07:03:03
【问题描述】:

使用 Ransack gem,我能够使用复选框对某些值进行搜索。但是,这不适用于多个复选框。我错过了什么?

查看:

<%= search_form_for @search do |f| %>
  Part Time:<%= check_box_tag "q[job_type_cont]", value = "Part time" %></br>
  Full Time:<%= check_box_tag "q[job_type_cont]", value = "Full time" %></br>
  <%= f.submit "Search" %>
<% end %>

索引操作:

def index
  @search = Job.search(params[:q])
  @jobs = @search.result
 end

【问题讨论】:

  • ransack 生成什么 SQL 查询?提交搜索时,您在日志中看到哪些参数?

标签: ruby-on-rails ruby-on-rails-3.2 ransack


【解决方案1】:

您的视图将始终在 params[:q][:job_type_cont] 中仅发送一个值 它将是一个带有 Part timeFull time 的字符串 对于接收多个值,您需要将其更改为数组(您需要更改复选框名称属性)如下

Part Time: <%= check_box_tag "q[job_type_cont][]", "Part time" %></br>
Full Time: <%= check_box_tag "q[job_type_cont][]", "Full time" %>

通过上述实现,控制器中的 params[:q][:job_type_cont] 将是一个包含视图中选定值的数组

【讨论】:

  • 索引操作是否应该保持不变?在视图中添加数组会呈现无论检查什么都不会显示任何结果的搜索。
  • 是的,您还需要在索引操作中更改查询 请参阅此文档以进行查询github.com/ernie/ransack/wiki/Basic-Searching#in
  • Kalpesh - 感谢您的帮助。不过,我真的被控制器难住了。我需要对索引操作进行哪些更改才能使其正常工作?
  • 你能分享你的表结构吗?或者你能列出你的工作表的列名吗?如果您的表中有 job_type 作为属性,并且您想根据 job_type 进行搜索,那么您可以在控制器中编写它。 Job.search(job_type_in: 参数[:q][:job_type_cont])
  • 所以你的控制器代码将类似于 def index @search = Job.search(job_type_in: params[:q][:job_type_cont]) @jobs = @search.result end 或者你可以直接写将其记为 def index @jobs = Job.search(job_type_in: params[:q][:job_type_cont]).result end
【解决方案2】:

卡尔佩什建议

Part Time: <%= check_box_tag "q[job_type_cont][]", "Part time" %></br>
Full Time: <%= check_box_tag "q[job_type_cont][]", "Full time" %>

@search = Job.search(job_type_in: params[:q][:job_type_cont])
@jobs = @ search.result

这真是一种迂回的说法:

Part Time: <%= check_box_tag "q[job_type_in][]", "Part time" %></br>
Full Time: <%= check_box_tag "q[job_type_in][]", "Full time" %>

这样你的控制器就不需要有趣的事情了:

@search = Job.search(params[:q])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 2013-03-02
    • 2015-02-15
    • 2018-09-23
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多