1

配列であるモデル フィールドがあります。問題なく保存してデータベースから取得できます。

ユーザーがこの配列を作成または編集するときに、それを表示してコンマ区切りのリストとして編集するようにします。配列として保存し、ユーザーにリストと対話させるという私の選択の背後には、賢明な理由があります。さらに、リスト/配列を含むレコードを編集することはめったにありません。99% の確率で、そのレコードを作成するときに 1 回だけ編集します。何度も表示することはできますが、それらの表示時間はレコードが編集モードにならないため、シリアライズの使用によるパフォーマンスの低下については心配していません。

文字列を文字列の配列に分割する方法と、文字列の配列を結合してカンマ区切りのリストを作成する方法を知っています。

私のジレンマは、この分割/結合をどこで行うかを中心に展開していますか? コントローラーで、表示前/保存前に呼び出されるプライベートメソッドとして、モデル内のどこかで、またはフォームヘルパーとして? わかりません。

アドバイスをいただければ幸いです。

4

1 に答える 1

0

テキストに変換する必要はありません。ActiveRecord::Base Class マクロserializeは、そのようなユース ケース用に構築されています -配列、ハッシュ、およびその他のマッピング不可能なオブジェクトをテキスト列に保存する

Active Record は、YAML を使用してテキスト列内の任意のオブジェクトをシリアル化できます。これを行うには、クラス メソッド serialize への呼び出しでこれを指定する必要があります。これにより、追加の作業を行うことなく、配列、ハッシュ、およびその他のマップ不可能なオブジェクトを格納できます。

class User < ActiveRecord::Base
  serialize :preferences
end

user = User.create(preferences: { "background" => "black", "display" => large })
User.find(user.id).preferences # => { "background" => "black", "display" => large }

ドキュメント: http://api.rubyonrails.org/classes/ActiveRecord/Base.html シリアライズ部分を参照

于 2013-08-24T03:49:19.890 に答える