2

私は 2 つのモデルUserとを持つ Rails アプリケーションを開発していますClientUserdevise に支えられ、認証を担当しhas_one Client、特定のユーザーのクライアントの詳細を保持します。Clientを作成するたびにモデルが作成されるようにするため、この関係は常に存在しますUser

私が使用している管理領域にはActiveAdmin. Userここで、管理インターフェイスから を作成しようとすると、次のようなフォームを使用します。

form do |f|
  f.inputs :username, :email, :password
  f.inputs :name => "Client", :for => :client do |client|
    client.inputs :name, :address, ...
  end
end

問題は、UserまたはClientが保存され、ページが検証エラーでリロードされることです。Rails コンソールを確認WARNING: Can't mass-assign protected attributes: client_attributesしましたが、作成しようとするたびにメッセージが表示されますUser

この問題を調べたところ、一括割り当てを可能にするにattr_accessibleは、割り当てが許可されているフィールドごとに定義する必要があることがわかりました。そのため、上記の各フィールドのモデルにこのディレクティブを配置Clientすると、メッセージが表示され続け、モデルが適切に保存されなくなります。

誰もこれについて手がかりを持っていますか?

4

1 に答える 1

5

問題はモデルではなく、ClientモデルにありますUser。これは、作成しようとしている主要なモデルであるためです。ログファイルのエラーメッセージが示すように、モデルの属性client_attributesのリストに追加するだけです。attr_accessibleUser

class User < ActiveRecord::Base
  attr_accessible :client_attributes
end

クラスにアクセス可能な属性のリストが既にあると思いますUser。したがってclient_attributes、そのリストの最後に追加するだけです。

モデルに加えた変更Client(つまり、属性のリストを に追加するattr_accessible) は、これが機能するために必要ありません。必要に応じて、先に進んで元に戻すこともできます。

于 2011-09-29T08:22:30.593 に答える