【问题标题】:Ransack with collection_select用 collection_select 搜查
【发布时间】:2013-12-17 17:58:14
【问题描述】:

下午,

我发现 Ransack 有点令人困惑。我正在尝试仅使用可用值填充我的下拉列表并根据该值过滤索引,但是当我尝试使用各种选项时,它会将所有信息拉到下拉列表中,包括重复项。

我怎样才能创建这个表单,以便它只显示可用的内容并根据它进行搜索。

jobs_controller.rb

 def index
    @jobs = Job.all
    @show_sub_nav = true
    @q = Job.search(params[:q])
    @searches = @q.result(distinct: true)
    @lang = Job.find_by_sql("SELECT languages FROM jobs GROUP BY languages").map &:languages
end

_subnav.html.erb

  <%= search_form_for @q do |f| %>
     <%= f.select "languages", options_for_select(@lang) %>
    <%= f.submit %>
  <% end %>

我目前收到此错误:

没有有效的语言谓词

感谢您的帮助,我很难理解 collection_select 和这些 form_helpers,因为我发现 API 文档没有多大帮助,因此任何链接也很有用。

【问题讨论】:

  • 为什么是find_by_sql?你不能用Job.has_many :languages吗?如果你使用它,那么options_for_select 可能会找到它可以使用的那种查询结果。
  • 您可以在控制器中使用 .has_many,我认为这仅适用于数据库关系,语言是字段列而不是模型。
  • p @lang 显示一维字符串数组?
  • 是的,@lang 旨在为下拉列表显示数组中的项目,效果很好。

标签: ruby-on-rails ransack


【解决方案1】:

在 Ransack 中,您需要在字段名称上添加谓词。如果您想对所选选项进行完全匹配,您可以执行以下操作:

<%= f.select :language_eq, @lang %>

有关谓词的更多信息,请参阅Basic Searching 页面。 RailsCast 370 提供更多信息。

【讨论】:

    猜你喜欢
    • 2012-12-07
    • 2016-07-07
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多