2012-02-27 94 views
2

newb here。我正在尝试在创建和保存订单和关系时执行交易。几乎就像你必须付钱才能跟随某人。订单保存后,关系被创建并保存。Rails交易

def create 
@order = current_cart.build_order(params[:order]) 
@order.ip_address = request.remote_ip 
if @order.save 
    if @order.purchase 

    respond_to do |format| 
    Order.transaction do 
     begin 
      @order.cart.line_items.all.each do |item| 
      current_user.person_relationships.build(:owned_id => item.person_id) 
      end 
     end 
     format.html {redirect_to root_path, :flash => {:success => "Transaction Success" } } 
     format.xml{render xml: root_path} 

     rescue ActiveRecord::RecordInvalid 
     format.html {render :action => "failure" } 
     format.xml {render :action => "failure"} 

     raise ActiveRecord::Rollback 
     end 
    end 
    end 
end 

订单创建时出现问题。就好像该方法跳过项目块并创建了订单,但没有创建人员关系。回答可能的链接也非常感谢。

在此先感谢。

+0

这将是有益的,看看模特太 – ScottJShea 2012-02-27 05:51:08

回答

2

在我看来,你只是建立关系,而不是为他们节省:

current_user.person_relationships.build(:owned_id => item.person_id) 

大概应该是

current_user.person_relationships.create(:owned_id => item.person_id) 
+0

它的工作。非常感谢!附注:构建和创建有什么区别? – Jches 2012-02-27 07:32:01

+1

'build'只是在内存中创建一个新对象,而'create'首先调用'build',然后立即调用'save',将对象存储在数据库中 – Wolfgang 2012-02-27 08:29:00

0

如果它正在跳过项目,那么您可能没有该购物车的line_items?检查轨道正在进行的查询以及返回的数据的日志。