Tag: 交易

如何挽救模型交易并向用户显示错误?

因此,假设您有2个模型,人员和地址,每人只有一个地址可以标记为“主要”。 因此,如果我想更改一个人的主要地址,我需要使用一个事务,将新的标记标记为主要标记并取消标记旧标记。 据我所知在控制器中使用事务并不好,所以我在模型中有一个特殊的方法,这就是我所拥有的: AddressesController < ApplicationController def update @new_address = Address.find(params[:id]) @old_address = Address.find(params[:id2]) @new_address.exchange_status_with(@old_address) end end 模型: class Address < ActiveRecord::Base def exchange_status_with(address) ActiveRecord::Base.transaction do self.save! address.save! end end end 所以问题是,如果模型方法中的事务失败,我需要解救它并通知用户有关错误的信息,我该怎么做? 有没有办法让这个模型方法返回true或false,具体取决于事务是否成功,就像save方法一样? 我可能可以将该事务放在控制器中并在救援部分中呈现错误消息,但我猜它不对或者我可以将该方法放入回调中,但想象有一些原因我不能这样做,是什么替代方案? PS不要注意查找带有params id和id2的实例,只是随机的事情来表明我有2个实例

如何使用事务以多模型forms显示错误消息?

组织和用户这两个模型具有1:多的关系。 我有一个组合注册表单,组织和该组织的用户都可以注册。 我遇到的问题是:当为用户提交无效信息时,它会再次呈现表单,但不显示用户的错误消息(例如“用户名不能为空”)。 表单在提交有效信息时确实有效,并且显示组织的错误消息,而不是用户。 我应该如何调整下面的代码,以便显示用户的错误消息? def new @organization = Organization.new @user = @organization.users.build end def create @organization = Organization.new(new_params.except(:users_attributes)) #Validations require the organization to be saved before user, since user requires an organization_id. That’s why users_attributs are above excluded and why below it’s managed in a transaction that rollbacks if either organization or user is […]

保存失败后Rails没有回滚事务()

我有这个域模型:用户有一组项目,项目的状态可能无法通过validation。 validation工作正常,我甚至看到当我使用save!时调用exceptionsave! 。 在我的控制器中,我有这个: @user.items() < {}, :status => :ok else render :json => {:status => :error, :errors => item.errors}, :status => :bad_request end 第一个POST成功,第二个POST失败,但是当我点击索引时,我仍然看到两个对象,好像第二个事务从未回滚过。 到底是怎么回事? 我的测试是这样的: post :create post :create get :index ActiveSupport::JSON.decode(response.body).length.should == 1 编辑:即使在运行服务器时,也不会回滚事务(sqlite3)。