【发布时间】: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