2013-04-16 2 views
2

Я создаю веб-приложение RESTful с ruby ​​+ sinatra. Данные хранятся в базе данных MongoDB, и я использую MongoMapper для этого.Как построить хэш в javascript и опубликовать его на сервере

Один из моих моделей имеет вложенную хэш-ключ:

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

Как вы можете видеть, что это хэш, ключ представляет собой строку и значение другой хэш, который отображает массив идентификаторов объектов * (давайте назовем модель Model B) идентификатору 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. Как мне получить доступ к нему на сервере и как он будет выглядеть?
+0

Вы используете чистый javascript или фреймворк вроде jQuery? JSON будет вашим лучшим выбором для всего этого. – iain

+0

@iain Я использую JQuery. – MarioDS

ответ

3

Посмотрите на использование JSON. Он предназначен для сериализации базовых объектов JavaScript в строку, что позволяет легко отправлять их из одного приложения в другое, обычно через HTTP. Существуют парсеры JSON для всех основных языков, поэтому это отличный инструмент для передачи данных, независимо от того, в каком приложении было написано. Ruby имеет хорошую реализацию и очень полезную страницу «JSON implementation for Ruby», где показано, как ее использовать:

require 'json' 

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

JSON также позволяет бросить объект на него, и получить последовательную строку или упорядоченную строку и получить объект, так что вы можете сжать все выше вниз к чему-то вроде этого, показывая полный круг сериализацию/синтаксического анализа:

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

Вы также можете сериализовать рубин объекты за пределами массивов, хэши, строки и целые числа:

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

Чтобы отправить данные, используйте Open :: URI, RestClient, Typhoeus, Curb или любой из многих клиентов Ruby HTTP.

+0

Это похоже на правильную вещь, спасибо. Не могли бы вы также показать javascript/jquery, пожалуйста? Просто чтобы понять, как он общается. – MarioDS

+1

Нет, в Интернете есть много примеров, показывающих, как это сделать. Попробуйте найти «отправить json с jquery». Например: http: // stackoverflow.com/questions/6587221/send-json-data-with-jquery –

+0

спасибо! А как насчет отправки его вместе с другими данными в одном сообщении, возможно ли это? – MarioDS