导轨 5.2 | Select2 多个逗号分隔的参数

Posted

技术标签:

【中文标题】导轨 5.2 | Select2 多个逗号分隔的参数【英文标题】:Rails 5.2 | Select2 Multiple Comma Seperated Parameter 【发布时间】:2019-06-03 12:30:54 【问题描述】:

我是 Rails 的新手,我正在兜圈子,试图实现具有多个选择的 Select2 输入。我已经阅读了 *** 上的解决方案,但没有一个对我有帮助,这通常意味着我做错了什么。

当我提交表单时,它会多次发送我的 federation_list 参数并使用不同的值(在标题中):

event[federation_list]: WDC

event[federation_list]: WDSF

我需要一个以逗号分隔的联合参数中的所有值,然后我可以在我的控制器中拆分它们。

我已尝试按照 Select2 文档中的说明添加 name: "federation_list[]",但我的 form_with 覆盖了它,因此它丢失了括号。

更新!我想出了解决方案,这是我的工作代码:

select2_initializer.js

$( document ).on('turbolinks:load', function() 
    $( "#event_federation_list" ).select2(
        theme: "bootstrap",
    multiple: true,
    placeholder: 'Select Federation(s)',
    width: 'style'
    ).val('').trigger('change');
);

_form.html.erb

<div class="form-group">
      <%= form.label :federation_list, value: "Federations", class: "form-label" %>
      <%= form.select :federation_list, options_from_collection_for_select(Federation.all, :id, :name, :selected => @event.federations.map(&:id)), ,  multiple: true  %>
</div>

:selected 使选定的选项在用户编辑表单时出现。

event.rb

def federation_list
    self.federations.map(&:name).join(', ')
end

def federation_list=(names)
    self.federations = names.split(',').map do |n|
        Federation.where(name: n.strip).first_or_create!
    end
end

如果是相关信息我的事件has_many:联邦,通过: Event_Federations。

GitHub rep

我最终选择了 Selectize 而不是 Select2,但该解决方案仍然适用于 Select2。

然后我在我的 event.rb 中编写了这段代码:

def federation_list
    self.federations.map(&:name).join(', ')
  end

  def federation_list=(ids)
    self.federations = ids.reject!(&:empty?).map do |id|
      Federation.where(id: id).first
      # Use .first_or_create! to let the user add new objects
    end
  end

我使用 SteveTurczyns 建议并在我的强参数中添加了 federation_list: []

这行得通!

【问题讨论】:

那是正确的回购吗?没有 Federation 或 EventFederation 模型。 哦,是的,对不起,@SteveTurczyn。我忘了把它推到 Git 上。我只是把它推到它自己的联邦分支上。谢谢指出! 而且还是没有Federation或者EventFederation模型,上面的代码也没有出现。 @SteveTurczyn - 我不知道为什么这些文件之前没有添加到我的提交中。我已经仔细检查过,他们现在在github.com/Curting/mydanceplan/tree/federation 那里。很抱歉给您带来不便! 【参考方案1】:

不确定这是否是您唯一的问题,但一个明确的问题是强参数要求您明确指定模型参数是否为数组。

代替

  params.require(:event).permit(:title, :country, 
    :city, :start_date, :end_date, :published_at, :user_id,
    :federation_list)

你应该有

  params.require(:event).permit(:title, :country, 
    :city, :start_date, :end_date, :published_at, :user_id,
    federation_list: [])

【讨论】:

谢谢!你让我朝着正确的方向前进。我将在下面描述我的解决方案。

以上是关于导轨 5.2 | Select2 多个逗号分隔的参数的主要内容,如果未能解决你的问题,请参考以下文章

从 CSV 文件(逗号分隔)创建 postgres 外部表,该文件有一个电子邮件列,其中多个电子邮件地址用逗号分隔

以美国格式写入多个电话号码逗号分隔

如果有多个可用值,则用逗号分隔产品属性项

使用逗号分隔符将单个 CSV 列批量转换为多个

正则表达式匹配两个或多个逗号分隔的整数

Select2 发布 ID 而不是文本