options_for_select Rails 4

时间:2016-08-11 00:57:28

标签: ruby-on-rails-4

我正在尝试使用options_for_select为这个简单的应用程序实现多选下拉菜单,但我无法让它工作。

我的模特search.rb

class Search < ActiveRecord::Base
def search_books
    books = Book.all
    books = books.where(["market LIKE ?",market]) if market.present?
    return books
end

我的search_controller.rb

   def new
     @search = Search.new    
     @markets = Book.uniq.pluck(:market)
   end

我的搜索表单

<%= form_for (@search) do |f| %>

  <div class="field">
    <%= f.label :market %><br>
    <%= f.select :market, options_for_select(@markets),:multiple => true, :include_blank => true, :prompt=>'All' %>

我的图书表

create_table "books", force: :cascade do |t|
t.string   "name"
t.string   "market"
t.string   "function"

.............................省略

使用这些代码,我可以获得一个选择下拉菜单,但我需要一个多选下拉菜单。 感谢

1 个答案:

答案 0 :(得分:0)

根据Rails apiselect方法采用以下参数:

select(object, method, choices = nil, options = {}, html_options = {}, &block)

:multiple => true是一个html选项,因此它应该是select的最后一个参数

此外,我认为您不需要include_blankprompt,因为它们的目的相似,但略有不同。有关差异的解释,请参阅此answer

因此请尝试:

<%= f.select :market, options_for_select(@markets), :prompt=> 'Select all', :multiple => true %>

我现在无法对此进行测试,所以请告诉我是否有效