Ruby on Rails - 所选值在多个方面未按预期工作:true (simple_form)

Ruby on Rails - Selected values are not working as expected in multiple: true (simple_form)

在我的表单中,我有一个 f.selectmultiple: true,但如果它不是 硬编码 ,则 select 不起作用。

这是我在 new 视图中的表格:

= f.select :os, get_uniq_objects(:os), {}, {multiple: true }

我的帮手

def get_uniq_objects(obj)
  somethings.pluck(obj).uniq
end

我的控制器

def campaign_params
      params.require(:something).permit(os:[])
end

new视图中,选择OSS时,结果将保存为['Linux', 'Windows'],因此在我的edit视图中i如下,但是 未选择任何内容:

= f.select :os, options_for_select(get_uniq_objects(:os), @something.os), {}, { multiple: true}

但是 如果我 硬编码 它们如下所示,一切正常。我什至通过将 @something.os 添加到我的视图来仔细检查它是什么,它与 硬编码 代码完全一样。

= f.select :os, options_for_select(get_uniq_objects(:os), ['Linux', 'Windows']), {}, { multiple: true}

我不确定我在这里做错了什么。感谢任何帮助,并提前致谢!

仔细查看 f.select 得到的值,帮助我解决了这个问题。

传递给它的值如下:

["Linux", "Windows"]

但出于某种原因,f.select 得到了这个数组(带反斜杠):

[\"Linux\", \"Windows\"]

这是我的解决方案。在我的模型中,我做了 gsub 将保存值更改为数组中的字符串:

before_save do
  self.os_name.gsub!(/[\[\]\"]/, "") if attribute_present?("os_name")
end

所以["Linux", "Windows"],会变成Linux, Windows

我将 f.select 更改为以下内容:

= f.select :os, options_for_select(get_uniq_objects(:os), @something.os.split(/\W+/)), {}, { multiple: true}

.split(/\W+/) 将字符串更改为 f.select 接受的数组