ruby-on-rails - 在 Rails 中保存来自 jquery 的哈希数组

标签 ruby-on-rails jquery

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

上下文

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

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

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

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

这是我到目前为止所想到的:

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

关键问题

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 用于在其他表中查找有关该项目的特征。

最佳答案

一种方法:

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

产生一个看起来像这样的参数哈希

{"items"=>{"item"=>{"x"=>"1", "y"=>"2"}, "item2"=>{"x"=>"3", "y"=>"4"}}}

然后在 Controller 中:

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 的需要。在这种情况下,传递给 Controller ​​的 ID 只是任意占位符,但它们在每个 .param() 调用中必须是唯一的,以区分一个对象和另一个对象。

关于ruby-on-rails - 在 Rails 中保存来自 jquery 的哈希数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12962741/

相关文章:

ruby-on-rails - 如何在主机上运行Nginx的情况下在Docker容器中运行Rails应用程序?

javascript - jQuery 从 xml 文档中提取属性

javascript - 使用 jQuery 选择器获取 div 高度?

jquery - 如何在 IE 的 jQuery CSS 中使用 HTC 行为?

jquery - 解除div内 'a'的onclick事件与onclick事件的绑定(bind)

mysql - Rails 没有在搜索表单上传递数据库查询

ruby-on-rails - Rails 搜索形式,两种模型

ruby-on-rails - Rails订单结果与多个联接到同一个表

javascript - 重构 HTML 的 DOM 操作

ruby-on-rails - 如何在 rails 中使用载波 'after the fact' 裁剪图像?