2012-02-27 7 views
2

новыйb здесь. Я пытаюсь выполнить транзакцию, когда порядок и отношения создаются и сохраняются. Почти так же, как если бы вам приходилось платить за то, чтобы следовать за кем-то. Когда заказ сохраняется, связь создается и сохраняется.Rails Transaction

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 

Проблема возникает, когда заказ создан. Это похоже на то, что метод просто проскакивает над блоком элементов, и порядок создается, но не создается person_relationships. Ссылки, на которые можно ответить, также очень ценятся.

Заранее спасибо.

+0

Было бы полезно, чтобы увидеть модели слишком – ScottJShea

ответ

2

Кажется мне, что вы просто строить отношения, но их не спасает:

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

, вероятно, следует

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

Он работал. Большое спасибо! Замечание: какая разница между сборкой и созданием? – Jches

+1

'build' просто создает новый объект в памяти, тогда как' create' сначала вызывает 'build', а затем сразу вызывает' save', который сохраняет объект в базе данных – Wolfgang

0

Если это пропуск по пунктам, у вас, вероятно, нет линий для этой тележки? Проверьте журналы для запросов, которые создает рельсы, и данные, которые возвращаются.