Ruby on rails 在rails中保存jquery中的哈希数组
我是RoR的新手。我试图解决的问题是如何将哈希数组从JQuery传递到Rails以保存在数据库中 上下文 在我的应用程序中,用户可以将任意数量的项目拖放到画布上。这是使用JQuery完成的 然后用户可以保存这些项目,包括它们的X-Y坐标 从概念上讲,我认为这是在保存一个散列数组,其中每个散列对应于一个项,由一个ItemCode、X坐标、Y坐标组成 我试图弄清楚在每一步中,应该使用什么方法/技术 以下是我到目前为止得出的结论:Ruby on rails 在rails中保存jquery中的哈希数组,ruby-on-rails,jquery,Ruby On Rails,Jquery,我是RoR的新手。我试图解决的问题是如何将哈希数组从JQuery传递到Rails以保存在数据库中 上下文 在我的应用程序中,用户可以将任意数量的项目拖放到画布上。这是使用JQuery完成的 然后用户可以保存这些项目,包括它们的X-Y坐标 从概念上讲,我认为这是在保存一个散列数组,其中每个散列对应于一个项,由一个ItemCode、X坐标、Y坐标组成 我试图弄清楚在每一步中,应该使用什么方法/技术 以下是我到目前为止得出的结论: ??是否在JQuery中保存对象数组 使用jquery.param序列
decodeURIComponent(jQuery.param({ items: { item1: { x: 1, y: 2 }, item2: { x: 3, y: 4 } } } )) # => items[item][x]=1&items[item][y]=2&items[item2][x]=3&items[item2][y]=4
生成一个如下所示的params散列
{"items"=>{"item"=>{"x"=>"1", "y"=>"2"}, "item2"=>{"x"=>"3", "y"=>"4"}}}
然后在控制器中:
params[:items].each do |k,v|
begin
item = Item.new( id: k, x: v.x, y: v.y ) # or better, Item.new( x: v.x, y: v.y )
item.save
rescue ActiveRecord::RecordInvalid # deal with problems saving
...
# retry?
end
end
在您的问题中,您正在客户端中生成项目ID。在实际创建对象时,最好让DB来处理,这样就不需要跟踪唯一ID。在这种情况下,传递给控制器的ID只是任意占位符,但它们在每个
.param()
调用中必须是唯一的,以区分一个对象和另一个对象。我不知道如何使用2维k,v进行每个循环。非常有助于了解-谢谢。在解码方面,我认为decodeURIComponent是客户端的javascript函数?换句话说,我不需要运行jQuery.param,首先将它传递给Rails,然后执行Rails解码的等效操作吗?这不是2D循环,而是哈希循环。它遍历散列中的每个元素,将每个键、值对传递到块中。decodeURIComponent()调用只是为了便于阅读。调用.param()
将返回一个URI编码的字符串,可以通过网络安全发送,Rails将对其进行解码。我最终通过一个带有隐藏字段的表单提交解决了这个问题(因为Rails表单打包了用于管理登录/注销状态的auth令牌),表单使用了一个activemodel(多亏了railscast),以及通过表单提交的数组的JSON编码。然而,你的回答让我明白了散列,这对这个问题至关重要。谢谢。我一直在读更多关于JSON的文章。这是一条更容易走的路吗?