Railsアプリでスレッド化せずに独自のコメントを作成しました。プロジェクトに関する新しいコメントについては、すべての通知に返信できるようにしたいと考えています。メールをMySQLのルビーハッシュに保存し、必要に応じてそこから読み取るのが最善でしょうか?定義する必要のないキーを使用してメールをハッシュに挿入する方法を理解しようとしています。
3 に答える
string
mysqlテーブルにタイプの列があると仮定します。
json
宝石を使用してください。json
gemがない場合は、によってインストールして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
hash
2番目を使用すると、からへの変換、json
およびその逆の変換が回避されます。
あなたによると、列ActiveRecord::Base
を作ることができserialize
ます:
class MyModel < ActiveRecord::Base
serialize :emails
end
User.create(:emails => %w( email1@a.com email2@b.com email3@c.com )
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がシリアル化のパフォーマンスの点で利点を提供するかどうかはわかりません。