1

ハッシュから移行/モデルを作成する方法があるのだろうか。たとえば、TwitterAPIの応答があります。

 twitter = {:possibly_sensitive_editable=>true,
 :geo=>nil,
 :text=>"http://t.co/asdf",
 :created_at=>"Tue Nov 20 18:10:31 +0000 2012",
 :possibly_sensitive=>false,
 :in_reply_to_status_id_str=>nil,
 :coordinates=>nil,
 :id_str=>"123456",
 :retweeted=>false,
 :in_reply_to_user_id_str=>nil,
 :in_reply_to_screen_name=>nil,
 :source=>"<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>",
 :entities=>
 {:media=>
    [{:type=>"photo",
     :indices=>[0,
     20],
     :url=>"http://t.co/asdf",
     :expanded_url=>"http://twitter.com/qwerty/",
     :media_url_https=>"https://p.twimg.com/qwerty.jpg",
     :source_status_id_str=>"123456",
     :id_str=>"123456",
     :sizes=>
           {:medium=>{:h=>1003,
                      :w=>600,
                     :resize=>"fit"}}}]}}

このハッシュからモデル(またはモデル)を作成したい場合、それを行う簡単な方法はありますか?全体をテキストとして解析し、移行をテキストファイルとして書き込むことでそれを行うことを想像できますが、それが最善の方法であるとは思えません。

したがって、少なくとも第1レベルのハッシュ(つまり、メディアではなくTwitterのみ)からモデルを作成したい場合、それを実現するための迅速な方法はありますか?ネストされたハッシュは可能ですか?

4

3 に答える 3

2

(ネストされていないハッシュの場合)可能ですか?もちろん。どうぞ:

class CreateTweets < ActiveRecord::Migration
  def change
    create_table :tweets do |t|


      twitter = {:possibly_sensitive_editable=>true,
        :geo=>nil,
        :text=>"http://t.co/asdf",
        :created_at=>"Tue Nov 20 18:10:31 +0000 2012",
        :possibly_sensitive=>false,
        :in_reply_to_status_id_str=>nil,
        :coordinates=>nil,
        :id_str=>"123456",
        :retweeted=>false,
        :in_reply_to_user_id_str=>nil,
        :in_reply_to_screen_name=>nil,
        :source=>"<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>"
      }

      twitter.keys.each do |key|
        t.string key
      end


      t.timestamps
    end
  end
end

>> Tweet.new
=> #<Tweet id: nil, possibly_sensitive_editable: nil, geo: nil, text: nil, created_at: nil, possibly_sensitive: nil, in_reply_to_status_id_str: nil, coordinates: nil, id_str: nil, retweeted: nil, in_reply_to_user_id_str: nil, in_reply_to_screen_name: nil, source: nil, updated_at: nil>

それはお勧めですか?いいえ...これらの各属性は単なる文字列であり、タイムスタンプやブール値ではないことがわかります。

ただし、これをベースラインと微調整として行うことができます。非推奨

于 2012-11-20T19:03:09.010 に答える
0

この応答のフィールド名に基づいて、新しいモデル クラスと新しいデータベース テーブルを作成しますか? いくつかのハッキングで、私はあなたができると確信しています。しかし、それは悪い考えです。

モデルとデータベース スキーマは通常、実行時にアプリケーションで作成されません。その必要はありません。API は通常、非常に構造化された形式でデータを返します。必要なデータを保持するための移行を行うのに 1 ~ 2 分しかかからず、それを非常に長期間使用することができます。

そして、なぜそれを保存したいのか、どのようなデータ型にしたいのか、破棄できるかどうかなどを考えながら、各フィールドを調べる価値があります。データベースへのこの API 応答のすべてのフィールドをやみくもに保存すると、おそらく最終的に保存されることになります最終的に使用することのない大量のデータ。

怠惰にならないでください。モデルを作成し、手動で移行を調整し、そのモデルの管理に必要なデータとコードを検討します。手作業の価値があります。

于 2012-11-20T18:50:07.917 に答える