1

「設定」のシリアル化されたハッシュである属性を含むモデルがあります。

これらの設定は通常空です。そのため、has_many アソシエーションを作成しませんが、場合によっては、ユーザーがこれらを入力する必要があります。次のように、任意の数のキーと値のペアを受け入れる必要があります。

object.settings = { first_setting: 'My setting', second_setting: 'Something else' }

設定の数、およびその値と名前は定義されていません。完全にユーザー次第。

理想的には、nested_form の link_to_add 機能のラインに沿って、新しい設定用のテキストフィールドの行を追加できるものが欲しいです。1 つは設定の名前用で、もう 1 つはその値用です。

私のモデルの 'serialize :settings, Hash' 以外は、どこにもありません。

どんな助けでも大歓迎です

4

1 に答える 1

1

さて、これが私が試したことであり、非常にうまく機能しています。

ユーザーモデル - 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 アプリケーションをゼロから起動しましたが、非常にうまく機能しています。ご不明な点がございましたら、お知らせください。

于 2013-06-24T15:21:17.717 に答える