0

私はユーザー管理システムを構築しており、認証用のデバイスから始めています。

このシステムでは、ユーザーが自分のプロファイルと、扶養家族(子供)のプロファイルを持つことができます。私が想像しているのは、ユーザーがアカウントを作成すると、基本的な電子メール/パスワードフィールドを使用して(デバイスによって)ユーザーテーブルに追加されることです。また、ユーザーに別のプロファイルモデルのプロファイルを持たせたいと思います。StackOverflowで見た他の質問とのアプローチの違いは、関係テーブルを介して、has_many関係を作成したいということです。これが理由です。

すべてのユーザーは、独自のプロファイルを持ちます。各ユーザーは、自分の子供用のプロファイルを作成し、それらのプロファイルを自分のユーザーアカウントに関連付けることができる必要があります。子供は独自のユーザーモデルを持ちません。したがって、各ユーザーは複数のプロファイルを持つことができます。また、リレーションシップテーブルを介してこれを実行したいと思います。後で、ユーザーの配偶者がシステムに参加した場合、子供を両方の親に関連付けることができるようにしたいと思います。

user.rb

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :id, :email, :password, :password_confirmation, :remember_me

  has_many :relationships

  has_many :profiles, :through => :relationships
  accepts_nested_attributes_for :profiles

  attr_accessible :profiles, :profiles_attributes
end

profile.rb

class Profile < ActiveRecord::Base
  attr_accessible :first_name, :last_name

  has_many :relationships
  has_many :users, :through => :relationships
end

Relationship.rb

# Had to enter at least 6 characters to improve post (formatting was flawed)
class Relationship < ActiveRecord::Base
  attr_accessible :first_name, :last_name

  has_one :relationship_type

  belongs_to :user
  belongs_to :profile
end

new.html.erb

<h2>Sign Up for your account</h2>

<%= form_for(resource,  :as => resource_name, 
                        :url => registration_path(resource_name)) do |f| %>

  <%= devise_error_messages! %>

  <div>
    <%= f.label :email %><br />
    <%= f.email_field :email, :autofocus => true %>
  </div>

  <div>
    <%= f.label :password %><br />
    <%= f.password_field :password %>
  </div>

  <div>
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation %>
  </div>

  <%= f.fields_for :profile do |builder| %>
    <div>
      <%= builder.label :first_name %><br />
      <%= builder.text_field :first_name %>
    </div>

    <div>
      <%= builder.label :last_name %><br />
      <%= builder.text_field :last_name %>
    </div>
  <% end %>

  <div><%= f.submit "Sign up" %></div>
<% end %>

<%= render "devise/shared/links" %>

sign_upページを参照すると、フォームが正しく読み込まれます。ただし、新しいユーザーを保存しようとすると、次のエラーが発生します。

保護された属性を一括割り当てできません:プロファイル

new.html.erbで、ネストされたフォームの行を次のように変更してみました

<%= f.fields_for :profiles do |builder| %>

しかし、それが原因でネストされたフォームがレンダリングされませんでした。

助けていただければ幸いです!

ありがとう!

4

1 に答える 1

0

:profiles、 いいえ:profile

<%= f.fields_for :profiles do |builder| %>
<div>
  <%= builder.label :first_name %><br />
  <%= builder.text_field :first_name %>
</div>

<div>
  <%= builder.label :last_name %><br />
  <%= builder.text_field :last_name %>
</div>

また、コントローラーでプロファイルを作成する必要があります。

resource.profiles.build
于 2013-01-18T21:23:18.657 に答える