Подтвердить что ты не робот

Ruby on Rails - множественный выбор в f.select

У меня есть следующий флажок в моей форме:

Related Type: &nbsp; <%= f.select(:TYPE, [['Type A', 'Type A'],
                                  ['Type B', 'Type B'],
                                  ['Type C', 'Type C'],
                                  ['Type D', 'Type D'],
                                  ['Type E', 'Type E']
                                 ],{ :prompt => "Please select"}
                                 ) %>

Я хочу разрешить пользователю делать множественные выборы, а также сделать размер окна выбора 5.

Как это сделать для кода выше?

4b9b3361

Ответ 1

После того, как ваш { :prompt => "Please select"} добавит еще один хэш с параметрами html, например.

<%= f.select(:TYPE, [['Type A', 'Type A'],
                                  ['Type B', 'Type B'],
                                  ['Type C', 'Type C'],
                                  ['Type D', 'Type D'],
                                  ['Type E', 'Type E']
                                 ],{ :prompt => "Please select"},
                                   { :multiple => true, :size => 5 }
                                 ) %>

Как только вы это сделаете, вы можете переместить свой параметр :prompt (сохраняйте пустой {}, хотя так, чтобы атрибуты html не обрабатывались как опции Rails.)

Также вам необходимо убедиться, что ваш код контроллера правильно принимает и обрабатывает несколько значений.

Ответ 2

В случае сбора, попробуйте

    <%= f.select(:TYPE, Categories.collect {|p| [ p.name, p.id ] }, 
                                           { :prompt => "Please select"}, 
                                           { :multiple => true, :size => 5 }) %>

Ответ 3

У меня есть полностью рабочий пример (включая предварительный выбор при редактировании объекта), когда:

  • Object - рассматриваемый объект
  • similar_ids является ключом к отношениям и является string

В форме:

form_for(@object) do |f|
  = f.select :similar_ids, options_from_collection_for_select(Object.all, :id, :name, {:selected => @object.similar_ids.split(';')}), {}, {:multiple => true, :size => 4, :name => 'object[similar_ids][]'}

И в модели Object.rb:

class Object < ActiveRecord::Base
  before_save :handle_similars

  def handle_similars
    self.similar_ids = self.similar_ids.select(&:present?).join(';') 
    # .select(&:present?) is necessary to avoid empty objects to be stored
  end

  def similars
    self.class.find(self.similar_ids.split(';'))
  end

end

Эти сообщения помогли мне:

Надеюсь, что это поможет

Ответ 4

{: prompt = > "Пожалуйста, выберите" }, {: multiple = > true,: size = > 5} {} важно, когда f.select

Ответ 5

HTML

<%= form.select(:product_ids, Product.all.collect {|p| [ p.name, p.id ] }, 
                                                   { :prompt => "Please select"}, 
                                                   { :multiple => true, :size => 5  }) %>

контроллер

@category = Category.new(category_params) 

def category_params
    params.require(:category).permit(:name, product_ids: [])
end