【问题标题】:Rails save a object inside a methodRails 将对象保存在方法中
【发布时间】:2017-09-23 03:58:52
【问题描述】:

我有一个方法 Order ,如果状态完成,减少方法保存的产品数量并创建交易记录。

一切正常,除了日志显示:

即使显示代码仍然有效

谁能解释一下为什么会这样?

def order_sold

    if sold
         order = Order.find(params[:id])
       product = order.product

      if order
        if params[:status] == 'COMPLETED'
          order.status = Order.statuses[0]
          product = order.product
          quantity = product.quantity
          product.quantity -= order.quantity
          product.save
          transaction = Transaction.new
          transaction.user_id = order.buyer_id
          transaction.status = params[:status]
          order.transaction = transaction
          order.save
          OrderMailer.order_confirmation(order).deliver


        end
      end


    else
      logger.info("FAILED")
    end
    render nothing: true
  end

记录器:

[对象对象]

/data/viop/releases/167/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/database_statements.rb:371:in block in commit_transaction_records' /data/viop/releases/167/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/database_statements.rb:370:in each' /data/viop/releases/167/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/database_statements.rb:370:in commit_transaction_records' /data/viop/releases/167/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/database_statements.rb:218:in transaction' /data/viop/releases/167/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22/lib/active_record/transactions.rb:208:in transaction' /data/viop/releases/167/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22/lib/active_record/transactions.rb:311:in with_transaction_returning_status' /data/viop/releases/167/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22/lib/active_record/transactions.rb:259:in block in save' /data/viop/releases/167/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22/lib/active_record/transactions.rb:270:in rollback_active_record_state! /data/viop/releases/167/vendor/bundle/ruby/2.2.0/gems/activerecord-3.2.22/lib/active_record/transactions.rb:258:in save' /data/viop/releases/167/app/controllers/orders_controller.rb:216:in order_sold

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 activerecord rubygems


    【解决方案1】:

    您不应该使用 Transaction 作为您的模型之一。选择一个不同的名称。 Order 是另一个建议更改的名称。

    【讨论】:

    • 我为什么要改变?
    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    相关资源
    最近更新 更多