3

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

语境

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

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

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

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

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

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

关键问题

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

我相信 Jquery.param 会生成这样的东西(以参数形式): 1[item_code]=432&1[x]=250&1[y]=200&2[item_code]=348... 我找不到任何东西告诉我 Rails 是否可以弄清楚前 3 个术语描述 1 个项目,接下来的 3 个描述下一个项目,等等。

B. Rails 的处理方式是什么?换句话说,我应该查看哪些特定方法作为将这个参数字符串作为数据库中的几个新条目放入数据库的工具?

当然,如果有一些完全不同的方法可以做到这一点,我很想听听。谢谢。

编辑

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

4

1 回答 1

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。当您实际创建对象以消除跟踪唯一 ID 的需要时,让数据库处理它是一个更好的主意。在这种情况下,传递给控制器​​的 ID 只是任意占位符,但它们在每次.param()调用中必须是唯一的,以区分一个对象和另一个对象。

于 2012-10-18T20:57:53.553 回答