私のアプリのサインアップフォームを使用すると、ユーザーはアカウントを作成できます。また、ユーザーレコードとaccounts_users(has_many:through)レコードも作成されます。ユーザーが[送信]をクリックしたら、「setup_account」メソッドを呼び出して、ユーザーの新しいアカウントのいくつかのデフォルト値を入力します。そうは言っても、このメソッドはほぼ機能していますが、手動で値を割り当てた3つのレコード(つまり、:user_id => @userまたは:account_id => @account)に誤った値を入力しています。account_idとuser_idの誤った値は常に1になります。これが機能しない理由について誰かが洞察を持っていますか?
これが私のアカウントモデルです:
def self.setup_account(p)
Account.transaction do
@account = Account.new(p)
@account.save!
@user = @account.users.first
@user.create_profile!
@group = @account.groups.create!( :user_id => @user.id, :name => 'Default' )
@group.members.create!( :account_id => @account.id, :user_id => @user.id )
Role.all.each do |role|
@account.roles_users.create!( :user_id => @user.id, :role_id => role.id )
end
end
return @account
end
これが私のAccountsControllerです:
def new
@account = Account.new
@user = @account.users.build()
@account.accounts_users.build()
respond_to do |format|
format.html # new.html.erb
format.json { render json: @account }
end
end
def create
@account = Account.setup_account(params[:account])
respond_to do |format|
if !@account.nil?
flash[:domain] = @account.subdomain
format.html { redirect_to thanks_url }
format.json { render json: @account, status: :created, location: @account }
else
format.html { render action: "new" }
format.json { render json: @account.errors, status: :unprocessable_entity }
end
end
end
私のモデルの関連付けは次のとおりです。
- アカウント(has_many:users;:through account_users; has_many:accounts_users; has_many:groups; has_many:members; has_many:roles_users)
- ユーザー(has_one:profile; has_many:accounts_users; has_many:accounts、:through =>:accounts_users; has_many:members; has_many:groups; has_many:roles_users; has_many:roles、:through =>:roles_users)
- Accounts_User(belongs_to:account; Belongs_to:user)
- グループ(has_many:members、as:membership、belongs_to:user、belongs_to:account)
- メンバー(belongs_to:membership、:polymorphic => true、belongs_to:account、belongs_to:user)
- プロファイル(belongs_to:user)
- ロール(has_many:roles_users; has_many:users:through =>:roles_users; has_many:accounts、:through =>:roles_users)
- RolesUser(belongs_to:user、belongs_to:account、belongs_to:role)
編集:setup_accountメソッドを編集し、アクションを作成します。