代码之家  ›  专栏  ›  技术社区  ›  Rubioli

Ruby on Rails-所选值在multiple:true(简单形式)中无法按预期工作

  •  0
  • Rubioli  · 技术社区  · 5 年前

    以我的形式,我有一个 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
    

    新的 视图,当选择oss时,结果将另存为 ['Linux', 'Windows'] 所以在我的 edit 我的看法如下 但是 未选择任何内容:

    = 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}
    

    我不知道我做错了什么。如有任何帮助,请提前感谢!

    1 回复  |  直到 5 年前
        1
  •  0
  •   Rubioli    5 年前

    深入了解价值 f.select 帮我解决了这个问题。

    传递给它的值如下:

    ["Linux", "Windows"]
    

    但出于某种原因, F.选择 得到这个数组(带反斜杠):

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

    这是我的解决方案。在我的模型中,我做了一个 gsub 要将保存值从数组更改为字符串,请执行以下操作:

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

    所以 ["Linux", "Windows"] 将成为 Linux, Windows

    我改变了我的 F.选择 遵循:

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

    我做的 .split(/\W+/) 将字符串更改为 F.选择 接受 .