【发布时间】:2016-07-26 05:32:52
【问题描述】:
我正在使用 postgresql 和 rails 4.2 进行应用程序开发。
问题来了:
在创建用户模型时,我需要同时创建与用户模型关联的另外两个模型:配置文件模型和 user_behavior 模型。为了保持记录的一致性,事务是这样使用的:
begin
@new_user = User.new
@new_user.transaction do
@new_user.update_attributes!(users_params)
@new_user.profile = Profile.create!(profiles_params)
@new_user.user_behavior = UserBehavior.create!
end
rescue ActiveRecord::RecordInvalid => exception
render_response_msg(4003, { message: exception.message })
rescue ArgumentError => exception
render_response_msg(4003, { message: "invalid parameters" })
end
@new_user
用户模型和配置文件模型都有一些验证
问题 1. 我使用实例变量 @new_user 将新创建的用户记录带出事务范围,我不确定这是执行此操作的通用方法,还有其他想法吗?
问题2.当用户参数正确时,通过并创建用户记录,则配置文件参数无效,使整个事务回滚。然后我发现用户模型的id(rails中模型的基本自动增量id)是不连续的。例如,如果由于配置文件参数而失败两次,那么成功事务将创建 id = 3 的模型。我该如何解决这个问题?
【问题讨论】:
-
为什么
id值的差距是个问题?它们将是独一无二的,这就是真正保证的一切。
标签: ruby-on-rails postgresql transactions rollback