如何从嵌套的表单值更新关联的记录

时间:2018-08-14 03:31:18

标签: ruby-on-rails ruby

我在尝试运行的回调方法上遇到困难。我有一张具有嵌套的采购条目表单的发票(一种表单中有几个发票条目)。每个购买条目都有单独的产品,数量和价格。

我在购买条目上有一个回调函数来更新关联产品的数量,例如:

var fileMask = String.Format("{0:yyMMdd}_????_Original_etc.pdf", date);
var paths = Directory.GetFiles(reportPath, fileMask);
var path = paths.OrderByDescending( p => p ).FirstOrDefault();

然后,在我的产品模型中,我有以下内容

let imageHeader = UIImageView(frame: CGRect(x: 0, y: 0, width: self.tableView.frame.width, height: 50))
let header = UIView(frame : CGRect(x : 0, y : 0, width : self.tableView.frame.width, height : 200))
imageHeader.image = UIImage(named: "paindown-logo.png")
imageHeader.contentMode = .scaleAspectFit
imageHeader.center = CGPoint(x: header.bounds.midX, y: header.bounds.midY);
header.addSubview(imageHeader)
self.tableView.tableHeaderView = header

但是,此update_quantity方法使用所有采购条目中的总数而不是仅创建的新的purchase_entries更新数据库。如何将方法限制为仅已创建的条目?

1 个答案:

答案 0 :(得分:0)

  

如何将方法限制为仅已创建的条目?

=>每次对象before_save都会调用saved。因此对于新的和现有的对象。 (创建和更新操作)

=> before_create仅在创建之前。因此,仅适用于新对象(创建操作)

=> Rails 5具有after_create_commit after_update_commitafter_destroy_commit(在创建,更新或销毁记录后调用after_commit。)

因此,您可以按照以下步骤进行操作:-

class PurchaseEntry < ActiveRecord::Base
  after_create_commit :update_quantity

  belongs_to :product

  def update_quantity 
    if product.present?
      product.update_quantity
    end
  end 
end