さて、これが私が試したことであり、非常にうまく機能しています。
ユーザーモデル - models/user.rb
class User < ActiveRecord::Base
serialize :settings
attr_accessible :email, :settings_attributes
def settings_attributes=(attributes)
self.settings = attributes
end
end
ユーザーコントローラー - controllers/users_controller.rb
class UsersController < ApplicationController
def index
@users = User.all
end
def show
@user = User.find(params[:id])
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
redirect_to users_path
else
render :new
end
end
end
ユーザー編集ページ - views/users/edit.html.erb
<h1>Users#edit</h1>
<%= form_for @user do |f| %>
<%= f.fields_for :settings_attributes, OpenStruct.new(@user.settings) do |builder| %>
<% @user.settings.keys.each do |key| %>
<%= builder.text_field key.to_sym %><br />
<% end %>
<% end %>
<%= f.submit %>
<% end %>
ユーザーを更新するとき、コントローラは params ハッシュで という名前のキーを受け取りますsettings_attributes
。User モデルでセッターを定義することにより、シリアル化されたsettings
属性を編集できます。
keys
ビューでは、settings
ハッシュ内のすべての を単純にループして、 a を表示しtextfield
ます。textarea
またはなどの他のものを表示することもできselect
ます。settings
これには、表示する設定のタイプを知るためにハッシュをカスタマイズする必要があります (type
設定のタイプを保持するハッシュに指定されたキーvalue
と、設定の名前を保持するキーを保存できます)。
機能に関してはadd_new_link
、このレールキャストhttp://railscasts.com/episodes/196-nested-model-form-revisedをご覧ください。
Rails アプリケーションをゼロから起動しましたが、非常にうまく機能しています。ご不明な点がございましたら、お知らせください。