我的应用程序中的注册表单允许用户创建帐户 - 它还会创建用户记录和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
我的模特协会是:
编辑:编辑setup_account方法并创建操作。
答案 0 :(得分:0)
在模型方法中查看我的评论,
def self.setup_account(p)
Account.transaction do
@account = Account.new(p)
# Account is not created yet so @account.users won't be retrieved properly, I guess
# You need to save account first.
@user = @account.users.first
@user.build_profile
@group = @account.groups.build( :user_id => @user, :name => 'Default' ) #Error
@group.members.build( :account_id => @account, :user_id => @user ) #Error
Role.all.each do |role| #Error
@account.roles_users.build( :user_id => @user, :role_id => role.id )
end
# Try moving this above my comment.
@account.save!
end
end
由于您正在使用事务块,因此您可以在构建事务块后立即开始保存。如果有任何错误,它将自动回滚。