Ruby on Rails - множественный выбор в f.select - PullRequest
49 голосов
/ 01 февраля 2011

В моей форме есть следующее поле выбора:

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.

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

Ответы [ 5 ]

75 голосов
/ 01 февраля 2011

После вашего { :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.)

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

9 голосов
/ 18 сентября 2013

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

    <%= f.select(:TYPE, Categories.collect {|p| [ p.name, p.id ] }, 
                                           { :prompt => "Please select"}, 
                                           { :multiple => true, :size => 5 }) %>
7 голосов
/ 22 августа 2014

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

  • 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

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

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

0 голосов
/ 05 июля 2019

HTML

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

Контроллер

@cateogry = Category.new(category_params)

def category_params
    params.require(:category).permit(:name, product_ids: [])
end
0 голосов
/ 11 июня 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...