しかし、誰かがそれが役に立つと思うかもしれませんが、また、ルビーとレールでかなり新しいので、これを行う良い方法があるかもしれません。モデルで
:
#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に渡してください。