从rails中的jquery保存一个哈希数组

时间:2012-10-18 19:59:40

标签: ruby-on-rails jquery

我是RoR的新手。我试图解决的问题是如何将一个哈希数组从JQuery传递给Rails以保存在数据库中。

上下文

在我的应用程序中,用户可以将任意数量的项目拖放到画布上。这是使用JQuery完成的。

然后用户可以保存这些项目,包括他们的X-Y坐标。

从概念上讲,我相信这会保存一个哈希数组,其中每个哈希对应一个项目,由一个ItemCode,X坐标,Y坐标组成。

我试图弄清楚每一步应该使用什么方法/技术。

这是我到目前为止所发现的:

  1. ?在JQuery中保存一组对象?
  2. 使用jquery.param
  3. 序列化此数组
  4. 使用jquery.ajax
  5. 将结果字符串作为参数传递给Rails
  6. ? Rails控制器以某种方式解析此字符串并将其保存在数据库中??
  7. 关键问题

    一个。这个序列化字符串应采用什么格式才能轻松解析?

    我相信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用于查找其他表中项目的特征。

1 个答案:

答案 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()调用中它们必须是唯一的,以区分一个对象。