我的模型中有一个数组,包含标签ID:
[ "2", "3", "4", "5", "6", "7", "8", "9", "10", "15", "16", "17", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "40", "50", "89", "90", "96", "97", "98", "100", "102", "103", "104", "106", "107", "109", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "122", "123", "124", "18", "125", "126", "127", "128", "129", "130", "131", "135", "136", "140", "201", "202", "203", "252", "253", "301", "302", "303", "304", "352", "354", "358", "359", "401", "402", "403", "404", "405", "407", "408", "451", "452", "453", "454", "457", "501", "503", "504", "551", "552", "553", "554", "555", "556", "557", "601", "602", "603", "604", "605", "606", "607", "651", "652", "655", "656", "657", "658", "701"]
我希望用户能够编辑此数组,例如删除ID或添加新ID。 我最简单的想法是在text_area表单字段中向他显示列的输出并使用“as :: array”
<%= f.text_area :labels, :value => @labels, :rows => 11, as: :array %>
它显示了数组在数据库中的确切存储方式。但是,当我编辑表单字段时,param将传输为:
[ \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\" ....
它在我的模型中存储一个空数组[]。 我想要的是用户在文本区域中编辑的内容也可以简单地再次存储为数组。这里有什么轨道将我的文本区域值转换为字符串。
我试图在我的控制器中捕获参数并使用eval()方法再次使其成为一个数组。我也尝试过拆分(“,”)方法,但没有成功。
数据库架构存储了btw:
t.text "labels", array: true
我如何实现目标?
答案 0 :(得分:2)
文本区域助手发送和包含输入内容的字符串。您需要在发送请求之前解析它。正常使用jQuery。或者将其作为有效数组重新分析到后端。
Eval,正如你所说应该有效。的 BUT YOU SHOULD NOT USE IT FOR SECURITY REASONS.
强>
irb(main):004:0> eval("[\"2\"]")
=> ["2"]
在控制器中只需:
class FooController < ApplicationController
private
def array_param
eval(param[:array])
end
end
使用控制器方法中的array_param
来引导您需要的任何地方。
def create
@bar = Bar.new(bar_params.merge({array: array_param}))
#whatever
end
private
def bar_params
params.require(:bar).permit(#everything except the array_param)
end