我的应用程序中的注册表单允许用户创建一个帐户 - 它还创建他们的用户记录和一个 accounts_users (has_many :through) 记录。一旦他们单击提交,我将调用“setup_account”方法为用户的新帐户输入几个默认值。话虽如此,该方法已接近工作,但为我手动分配值的三个记录输入了不正确的值(即: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:用户;:通过 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 方法并创建操作。