Можно ли создать модель и дочерние модели, используя Rails + MongoDB / Mongoid только с JSON? - PullRequest
0 голосов
/ 07 марта 2011

Например, я хотел бы создать новый объект Tweet из следующего JSON

{:for_user=>14248719, :message=>{:place=>nil, :user=>{:contributors_enabled=>false, :statuses_count=>217, :profile_use_background_image=>true, :friends_count=>3, :profile_background_color=>"C0DEED", :url=>nil, :following=>nil, :verified=>false, :profile_background_image_url=>"http://a3.twimg.com/a/1298748610/images/themes/theme1/bg.png", :time_zone=>nil, :favourites_count=>0, :profile_text_color=>"333333", :follow_request_sent=>nil, :profile_sidebar_fill_color=>"DDEEF6", :description=>"Lets get panda dev team rawk!", :id_str=>"95923128", :profile_background_tile=>false, :followers_count=>2, :created_at=>"Thu Dec 10 15:29:56 +0000 2009", :protected=>true, :profile_image_url=>"http://a2.twimg.com/profile_images/1121266473/panda01_normal.jpg", :is_translator=>false, :show_all_inline_media=>false, :geo_enabled=>false, :profile_link_color=>"0084B4", :location=>"Brighton", :name=>"letsgetpandadev", :listed_count=>0, :notifications=>nil, :profile_sidebar_border_color=>"C0DEED", :screen_name=>"letsgetpandadev", :id=>95923128, :lang=>"en", :utc_offset=>nil}, :favorited=>false, :coordinates=>nil, :text=>"another magic tweet", :in_reply_to_screen_name=>nil, :in_reply_to_user_id=>nil, :in_reply_to_status_id=>nil, :in_reply_to_status_id_str=>nil, :source=>"web", :contributors=>nil, :retweeted=>false, :in_reply_to_user_id_str=>nil, :id_str=>"44709765150015488", :retweet_count=>0, :created_at=>"Mon Mar 07 10:43:33 +0000 2011", :geo=>nil, :id=>44709765150015488, :entities=>{:urls=>[], :user_mentions=>[], :hashtags=>[]}, :truncated=>false}}

.. и сохранить «message», «message.user» и т. Д. Как встроенные дочерние модели.Разбор JSON и вставка, которая просто возвращает объект Tweet с хешем, сохраненным в свойстве сообщения.

Возможно ли то, что я пытаюсь достичь?Если так, то как?и если нет, было бы возможно через другой метод?

Я использую Rails 3 и гем Mongoid для MongoDB.

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 марта 2011

Конечно, вы можете - только не с обертками mongoid / mongomapper.Подключитесь через сам драйвер ruby ​​... В этом руководстве больше: http://api.mongodb.org/ruby/current/file.TUTORIAL.html

require 'rubygems'
require 'mongo'

db = Mongo::Connection.new.db("mydb")
test_collection = db.collection("testCollection")

doc = {"name" => "MongoDB", "type" => "database", "count" => 1,
       "info" => {"x" => 203, "y" => 102}
      }
test_collection.insert(doc)
0 голосов
/ 07 марта 2011

Если вы хотите, чтобы сообщение было своим собственным объектом, то вам нужно будет либо внедрить, либо ссылаться на другую модель, которая его определяет.

class Tweet
  include Mongoid::Document

  embeds_one :message
end

class Message
  include Mongoid::Document

  embedded_in :tweet

  field :place
  ...
end

Когда вы создаете атрибуты, вы захотите построить их так же, как вы бы разместили форму с вложенными атрибутами и настроить свою модель так, чтобы они принимались таким образом.

...