7

私は、Rails 3.2のデータストア機能を指しています。これは、MySQLのようなリレーショナルデータベースを使っていても、キー値ストアをテキストフィールドに格納するオプションがあります。フィールド。ハッシュキーバリューストアを含むデータベースフィールドを更新するベストプラクティス/一貫性のある方法はありますか?

しかし、これらのフィールドをRESTfulなHTMLフォームから更新するためのドキュメントはありますか?それとも、まったくお勧めしないものですか?つまり、より良い解決策はNoSQLに行くことでしょうか?

答えて

0

私は質問を理解していれば、フィールドで扱うその時点で

store :settings, accessors: [ :weight, :length, :color ] 

のように、モデルでは、私はあなただけの店を保持するフィールド名を宣言する必要があると思う、および関連するアクセサ(プロパティ) ARとARELは他の形式と同様に、フォームでも同様です。

ここには魔法がほとんどありません。フィールドは値のハッシュを保持します。ストア宣言はRailsに、読み書きかどうかに関わらず、あなたがsomething.weightやsomething.colorのように参照できることを知らせます。シンプルで滑らかです。クラシックDHH。

0

しかし、誰かがそれが役に立つと思うかもしれませんが、また、ルビーとレールでかなり新しいので、これを行う良い方法があるかもしれません。モデルで

#user.rb 

attr_accessible :preferences 
store :preferences 

、部分の形で:今すぐ

#views/users/_form.rb 

<% @user.preferences.each do |k, v| %> 
    <% form.fields_for :preferences, @user.preferences[k] do |p| %> 
     <div class="field"> 
     <%= p.label k %> 
     <br/> 
     <%= p.text_field k, :value => v %> 
     </div> 
    <% end %> 
<% end %> 

フォームアイブからいくつかの余分なフィールドを追加するには、モデルに2 attr_accessorを作成:

attr_accessible ... , :new_pref_key, :new_pref_val 
attr_accessor ... , :new_pref_key, :new_pref_val 

2つの新しいフィールドをフォームに追加しました

私のコントローラ上の210
<%= f.label :new_pref_key %> 
<%= f.text_field :new_pref_key %> 
<%= f.label :new_pref_val %> 
<%= f.text_field :new_pref_val %> 

が、私はこのように、新しいフィールドの有無をチェックして、新しいものとのprefsの前の値をマージする機能作っ:行わ

#users_controller.rb 
... 
new_key = params[:user][:preferences][:new_pref_key] 
new_val = params[:user][:preferences][:new_pref_val] 
new_preference = { 
    new_key => new_val 
} 
current_params = params[:user][:preferences].merge! new_preference 
... 

を私はそれを返すことと、 update_attributesに渡してください。

関連する問題