在 rails 中的页面加载时使用多个 true 选项填充 select2 字段

Posted

技术标签:

【中文标题】在 rails 中的页面加载时使用多个 true 选项填充 select2 字段【英文标题】:Populate select2 field with multiple true option on page load in rails 【发布时间】:2020-03-16 13:14:07 【问题描述】:

我有一个 Rails 应用程序,我正在尝试使用 jquery select2 添加一个 ruby​​ 选择标记,选择 2 工作得非常好。但我希望如果用户重新访问该页面,它应该向他们显示他们之前选择的值。

这是我的代码

view.html.erb 文件

<% if @select2_values.present? %>
   <%= select_tag "select2_name", options_for_select(@select2_values.map  |obj| [obj[:text], obj[:id]] ), multiple: true, class: "form-control select2", id: "resultOf_select2" %>
<% else %>
   <%= select_tag "select2_name", options_for_select([]), multiple: true, class: "form-control select2", id: "resultOf_select2" %>
 <% end %>

当我将binding.pry 放入 if 语句中时,它会正确地停在那里,而且当我检查控制台时,@select2_values 数组看起来像这样

[ :id 1, :text "some text" ,
  :id 2, :text "some text" ,
  :id 3, :text "some text" ,
]

如果我删除multiple : true 选项,它会正确显示@select2_values 数组的第一个值。有人可以帮我弄清楚如何使用multiple:true 选项显示所有值

任何帮助表示赞赏,在此先感谢

【问题讨论】:

【参考方案1】:

首先:您需要将用户选择的值存储在某处...例如 localstorage(因为如果您使用 sessionStorage,这些值将丢失)

第二:当用户访问您的页面时,尝试获取该用户选择的值...如果有什么则将此值设置为 select2 如下所示:

$('#mySelect2').val(['1', '2']);

您可以在此处找到有关本地存储的更多信息:

https://www.w3schools.com/jsref/obj_storage.asp

希望对你有帮助

【讨论】:

我已经将数据存储在数据库中,所以我做了第一步,然后当用户再次访问我的页面时,我在一个 ruby​​ 变量中获得选定的值 @select2_values 这是第二步,然后我尝试按照您在第三步中显示的方式直接使用我的 ruby​​ 变量或创建一个 javascript 变量并将我的 ruby​​ 变量值分配给它,然后设置该值,但两种方式都不起作用 然后在 foreach 中,您可以验证是否选择了一个值...如果选择了值,则将其推送到一个数组,最后在 select2 上设置此值...类似于这样: var selectedValues =新数组(); options_for_select.forEach(opt => select2_values.forEach(selectedOpt => if(opt.id == selectedOpt.id) selectedValues.push(element.text); ); ); $('#mySelect2').val(selectedValues);

以上是关于在 rails 中的页面加载时使用多个 true 选项填充 select2 字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在rails中异步加载部分页面

Rails JavaScript 仅在您刷新页面时加载,而不是在原始页面加载时加载,这是怎么回事?

文档准备好后通过 Ajax 加载的 Rails 远程表单未提交

Rails 5.2 数据表不会在页面更改时刷新数据

使用 ajax 刷新页面时,Ruby on Rails 失败

Rails:嵌套的远程表单在页面加载时不起作用