2

我正在用 ruby​​ + sinatra 构建一个 RESTful Web 应用程序。数据存储在 MongoDB 数据库中,我使用 MongoMapper 来执行此操作。

我的一个模型有一个嵌套的哈希键:

{'Key' => {'ObjectA_id' => ['ObjectB1_id', 'ObjectB2_id', ... , 'ObjectBn_id']}}

如您所见,它是一个散列,其键是字符串,值是另一个散列,它将对象 ID 数组*(我们称之为模型Model B)映射到 id 的Model A.

* (实际上这些在技术上也是字符串,因为您不能将真正的 BSON ObjectID 存储在哈希中)

问题是我不知道如何开始这些数据发送到服务器。通常我使用这样的表格:

<form action="/create" method="post">
    <input type="text" name="myField"/>
    <input type="submit"/>
</form>

在服务器端,我可以访问用户myField使用此代码填写的任何内容:

post '/create' do
    myField = params[:myField]
end

问题显然是我永远无法纯粹使用 HTML 表单来做到这一点,所以我想知道:我该如何解决这个问题?我在想javascript/jquery,但后来我想知道:

  1. 如何在 javascript/jquery 中模拟哈希?
  2. 如何将其与其他表单数据一起发送?
  3. 我如何在服务器上访问它,它会是什么样子?
4

1 回答 1

3

看看使用JSON。它旨在将基本 JavaScript 对象序列化为字符串,使您可以轻松地将它们从一个应用程序发送到另一个应用程序,通常通过 HTTP。所有主要语言都有 JSON 解析器,所以它是一个很好的数据传输工具,无论应用程序是用什么编写的。Ruby 有一个很好的实现,还有一个非常有用的“ Ruby 的 JSON 实现”页面展示了如何使用它:

require 'json'

hash = {'foo' => 'bar'}
serialized_hash = hash.to_json # => "{\"foo\":\"bar\"}"
JSON.parse(serialized_hash) # => { "foo" => "bar" }

JSON 还允许您向其抛出一个对象,并获取一个序列化字符串,或者一个序列化字符串并获取一个对象,因此您可以将上述所有内容缩小到如下所示,显示一个完整的序列化/解析:

JSON[JSON[hash]] # => { "foo" => "bar" }

除了数组、哈希、字符串和整数之外,您还可以序列化 Ruby 对象:

require 'json/add/core'
JSON[/foo/] # => "{\"json_class\":\"Regexp\",\"o\":0,\"s\":\"foo\"}"

要发送数据,请查看使用 Open::URI、RestClient、Typhoeus、Curb 或许多 Ruby HTTP 客户端中的任何一个。

于 2013-04-16T14:32:01.940 回答