Ruby on Rails - 所选值在多个方面未按预期工作:true (simple_form)
Ruby on Rails - Selected values are not working as expected in multiple: true (simple_form)
在我的表单中,我有一个 f.select
和 multiple: 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
会 接受的数组 。
在我的表单中,我有一个 f.select
和 multiple: 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
会 接受的数组 。