0

Railsアプリでスレッド化せずに独自のコメントを作成しました。プロジェクトに関する新しいコメントについては、すべての通知に返信できるようにしたいと考えています。メールをMySQLのルビーハッシュに保存し、必要に応じてそこから読み取るのが最善でしょうか?定義する必要のないキーを使用してメールをハッシュに挿入する方法を理解しようとしています。

4

3 に答える 3

1

stringmysqlテーブルにタイプの列があると仮定します。

json宝石を使用してください。jsongemがない場合は、によってインストールしてgem install jsonください。

require 'json'
reply_emails_list = ["a@gmail.com", "b@gamil.com"]
obj.column_name = {:emails => reply_emails_list}.to_json  #storing ruby hash as string in mysql

ルビーハッシュを取り戻すには、 `JSON.parse(obj)'を使用します

emails_list = JSON.parse(obj.column_name)  #ruby hash

また

レールのように。モデルでは、次のように実行できます。

YourModel < ActiveRecord::Base
  serialize :column_name, Array  #If don't want hash
  serialize :column_name     #you can store key value pair as I shown above
end

hash2番目を使用すると、からへの変換、jsonおよびその逆の変換が回避されます。

于 2013-02-05T19:23:09.493 に答える
0

あなたによると、列ActiveRecord::Baseを作ることができserializeます:

class MyModel < ActiveRecord::Base
  serialize :emails
end

User.create(:emails => %w( email1@a.com email2@b.com email3@c.com )
于 2013-02-05T19:37:29.450 に答える
0

Postgresには、実際の配列ストレージを取得するために使用できる配列拡張機能があります。残念ながら、これはMySQLでは機能しません。

電子メールなどのデータに最適なのは、電子メールのリストを文字列フィールドとしてシリアル化し、配列アクセサーを提供する合成属性を提供することです(必要な場合)。その後、コメントにコールバックを設定して、コメントがこのプロジェクトに追加されたときにメーリングリストを更新できます。

class Project < ActiveRecord::Base
  # db String field email_list
  attr_accessor :emails

  def emails
    email_list.split(',')
  end

  def emails=(email_ary)
    self.email_list = email_ary.join(',')
  end
end

これは、JSON BLOBを使用する代わりに、テキスト検索とコンマ区切りリストの処理を容易にするための優れた代替手段になります。split()またはJSON.parseがシリアル化のパフォーマンスの点で利点を提供するかどうかはわかりません。

于 2013-02-05T19:29:53.063 に答える