ruby-on-rails Ruby on Rails --www.example.com中的多项选择f.select

xpcnnkqh  于 2023-06-07  发布在  Ruby
关注(0)|答案(9)|浏览(448)

我的表单中有以下选择框:

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。
上面的代码怎么做?

ajsxfq5m

ajsxfq5m1#

在你的{ :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选项)。
你还需要确保你的控制器代码正确地接受和处理多个值。

nqwrtyyt

nqwrtyyt2#

如遇催收,请尝试

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

du7egjpx3#

我有一个完整的工作示例(包括编辑对象时的预选),当:

  • 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

这些文章帮助了我:

希望有帮助

pdsfdshx

pdsfdshx4#

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
oymdgrw7

oymdgrw75#

{:prompt =>“Please select”},{:multiple => true,:size => 5 } {}在f.select

gz5pxeao

gz5pxeao6#

使用bootstrap selectpicker和预先选择的值:

= simple_form_for [:backend, @user], html: { autocomplete: 'off' } do |f|
      = f.select :role_ids, options_for_select(Role.all.map{|role| [role.name, role.id]}, @user.role_ids), {},  {:multiple => true, inlcude_blank: false, class: "form-control input-sm selectpicker"}

在控制器中:

def user_params
      params.require(:user).permit(:id, role_ids: [])
end

# only if you havent build in new action
def new
  # set user
  @user.roles.any?
end
fumotvh3

fumotvh37#

多选:

= form_with url: ui_dashboard_diagrams_path, method: :get, local: true do |f|
  .row
    .col.form-group
      = f.select :our_organization_ids,
                 options_for_select(OurOrganization.pluck(:name, :id), params[:our_organization_ids]),
                 { include_blank: '' },
                 { multiple: true, class: 'form-control form-select-multiple' }

javascript:
  $(document).ready(function() {
    $('.form-select-multiple').select2({
      allowClear: true,
      multiple: true
    });
  });

将permit数组our_organization_ids添加到您的控制器:

private

def diagrams_params
  params.permit([our_organization_ids: []])
end
wvmv3b1j

wvmv3b1j8#

除了上面的解决方案,我还必须更改输入的名称,这样Rails将把参数解析为数组。这里输入创建简单的形式:

= f.input :my_ids, collection: ['A', 'B'], include_blank: false, input_html: { name: 'form[my_ids][]', multiple: 'multiple' }
70gysomp

70gysomp9#

<%= f.select :tag_ids, Tag.all.collect {|t| [t.name, t.id]}, { :prompt => "Please select"}, { :multiple => true, :size => 5 } %>

相关问题