我是RoR的新手。我试图解决的问题是如何将一个哈希数组从JQuery传递给Rails以保存在数据库中。
上下文
在我的应用程序中,用户可以将任意数量的项目拖放到画布上。这是使用JQuery完成的。
然后用户可以保存这些项目,包括他们的X-Y坐标。
从概念上讲,我相信这会保存一个哈希数组,其中每个哈希对应一个项目,由一个ItemCode,X坐标,Y坐标组成。
我试图弄清楚每一步应该使用什么方法/技术。
这是我到目前为止所发现的:
关键问题
一个。这个序列化字符串应采用什么格式才能轻松解析?
我相信Jquery.param会生成这样的东西(以param形式): 1 [item_code] = 432& 1 [x] = 250& 1 [y] = 200& 2 [item_code] = 348 ...我一直无法找到任何东西告诉我Rails是否可以找出第一个3个术语描述1个项目,接下来的3个描述下一个项目等。
B中。 Rails处理这个问题的方法是什么?换句话说,我应该将哪些特定方法看作是将这个params字符串作为数据库中的几个新条目放入数据库的工具?
当然,如果有一些完全不同的方式,我很乐意听到它。感谢。
修改
为了澄清,ItemCode意味着与数据库中项目条目的id不同。 ItemCode用于查找其他表中项目的特征。
答案 0 :(得分:0)
一种方式:
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()
调用中它们必须是唯一的,以区分一个对象。