使用Javascript生成Rails文本数组
Use Javascript to generate Rails Text Array
我正在尝试编写一些JavaScript,允许用户一次输入一个邮政编码,并建立一个数组,将提交给Rails应用程序。
相关内容如下:
控制器。rb -参数
{:zipcodes => []}
Schema.rb
t.text "zipcodes", default: [], array: true
html。erb javascript更新隐藏元素
的值 <%= f.hidden_field :zipcodes, id:"zipcodes-hidden-tag", name:"provider[zipcodes]" %>
js。erb文件
//Adding a zipcode
var array = [];
$("#addZipcode").click(
function addZipcode() {
x = $("#newZipcode").val(); // gets the zipcode entered by the user
array.push(x);
$("#zipcode_div").text(array); // updates a div so the user can see the data entered
$("#newZipcode").val(""); //clear the zipcode box after submitting
$("#zipcodes-hidden-tag").val("[" + '"",' + '"' + array.join('","') + '"' + "]"); //puts the brackets, empty quote block, and quotes around the elements and updates the hidden field value
}); //Adding a zipcode
这是它在Rails控制台中成功时的样子(使用一个多选择字段):
"provider"=>{"zipcodes"=>["", "90210", "90211", "90212"],
当使用Javascript生成的数组时,我可以看到以下值被传递给Rails,这是正确的格式
["","90210","90211","90212"]
但是在Rails控制台中,它是这样出现的:
"provider"=>{"zipcodes"=>"['"'",'"90210'",'"90211'",'"90212'"]"
而Rails显示
Unpermitted parameter: zipcodes
我觉得这里有两个问题。在括号的开始和结束处添加了一组额外的引号:
"[ ... ]"
双引号用反斜杠转换成字面量。
有什么想法,我需要改变让这个工作吗?
谢谢!
控制台的输出,
"provider"=>{"zipcodes"=>"['"'",'"90210'",'"90211'",'"90212'"]"
正是您应该期望的。您的javascript代码将数组编码为字符串,并通过隐藏字段提交它,因此params[:provider][:zipcodes]
是控制器中的字符串。为了将它分配给你的模型,你需要做一些类似
provider.zipcodes = JSON.parse(params[:provider][:zipcodes])
Unpermitted parameter: zipcodes
消息最有可能是因为您没有将白名单或从参数哈希中删除zipcodes
键而批量分配给您的模型。
要绕过强参数,请尝试删除zipcodes
键。
provider.zipcodes = JSON.parse(params[:provider].delete(:zipcodes))
safe_params = params.require(:provider).permit(:any, :other, :fields)
provider.update!(safe_params)
代替这一行:
$("#zipcodes-hidden-tag").val("[" + '"",' + '"' + array.join('","') + '"' + "]");
如果你把它改成:
$("#zipcodes-hidden-tag").val('"' + array.join('","'));
那么你的值将会是:"979794,297942,24444"
这将使它非常容易在控制器中转换为数组:
params[:provider][:zipcodes].split(',')
#=> ["979794", "297942", "24444"]
可以是:
params[:provider][:zipcodes] = params[:provider][:zipcodes].split(',')
相关文章:
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 高亮显示与数组字符串一起使用时文本插件中断
- 使用Javascript使用数组检查文本框中的值
- 如何获取文本框组的值,并使用jquery将它们放入(key:Value)数组中
- JavaScript:将字符串数组转换为文本区域
- 如何放置ÅÄ和#214;在javascript数组中,然后将其与html文本进行比较
- 数组中的随机文本字符串
- 单击select'时将数组行回显到文本区域中;s选项
- 数组在手动写入时有效,但从文本文件加载时无效
- I'我试图用javascript制作文本框,并将输入的值发送到数组中的文本框中进行添加
- 对照数组脚本检查文本框中的值不起作用
- 数组函数不适用于从元素文本创建的JavaScript数组
- 如何从DIV数组向DIV添加文本
- 你能提交一个带有文本输入数组的表单吗
- 将文本框数组值传递到javascript中
- 如何将数组文本框名称发送到 ajax
- 将文本文件读入数组
- 使用 jQuery 计算文本框数组中的值
- JavaScript从文本/数组中删除重复项