Ruby on rails 在rails中保存jquery中的哈希数组

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序列

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

上下文

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

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

从概念上讲,我认为这是在保存一个散列数组,其中每个散列对应于一个项,由一个ItemCode、X坐标、Y坐标组成

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

以下是我到目前为止得出的结论:

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

    这个序列化的字符串应该采用什么格式才能被Rails轻松解析

    我相信Jquery.param将生成如下内容(以param形式): 1[项目代码]=432和1[x]=250和1[y]=200和2[项目代码]=348。。。我还没有找到任何东西来告诉我Rails是否能够找出前3个术语描述1项,下3个术语描述下一项,等等

    B.Rails如何处理这个问题?换句话说,我应该将哪些特定的方法视为将这个params字符串作为几个新条目放入数据库的工具

    当然,如果有完全不同的方法,我很乐意听到。谢谢

    编辑

    只是澄清一下,ItemCode与数据库中条目的id不同。ItemCode用于在其他表中查找项目的特征。

    一种方法:

    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的文章。这是一条更容易走的路吗?