在我的应用程序中,我有模型PurchaseOrder和PurchaseOrderList。当我创建采购订单时,它会使用嵌套表单更新表purchase_orders和purchase_order_lists。
现在我希望能够在purchase_orders / show上添加按钮更新库存。单击此按钮时,将在表库存中创建新记录,其中包含与采购订单相同的产品,单位和价格。
逻辑是,首先我创建一个采购订单然后单击按钮以在收到货物时更新库存。
我想出的最好的方法是在PurchaseOrders控制器上创建此方法:
CombinedTypeSolver combinedTypeSolver = new CombinedTypeSolver();
combinedTypeSolver.add(new JavaParserTypeSolver("path to the sourcefiles"));
JavaParserFacade j=JavaParserFacade.get(combinedTypeSolver);
SymbolReference<MethodDeclaration> ref = j.solve((MethodCallExpr) n);
和我的purchase_orders / show:
def update_stock
@purchase_order_list = PurchaseOrderList.where(PURCHASE_ORDER: params[:ID])
@stockdiary = Stockdiary.create(PRODUCT: @purchase_order_list.PRODUCT, UNITS: @purchase_order_list.UNITS, PRICEBUY: @purchase_order_list.PRICEBUY)
flash[:notice] = "Stock updated successfully."
redirect_to(:action => 'show', :ID => @purchase_order.ID)
end
但它会引发错误
<%= link_to "Update Stock", { controller: :purchase_orders, action: :update_stock, ID: @purchase_order.ID} %>
但在purchase_order_lists表上有一列PRODUCT。
请注意,我在方法中仅包含purchase_order_lists和stockdiaries共有的列,因为其他人(作为id或status)不关心此问题。列名称是资本,因为我在现有数据库上构建应用程序。
从采购订单创建库存的正确方法是什么?
答案 0 :(得分:1)
<强>更新强>
Rails从此查询返回 ActiveRecord Relation :
where
这是因为您使用了find_by
,因此ActiveRecord会返回一个可能包含多条记录的关系。如果您只想要一条记录,或者即使您知道只有一条记录,那么您应该使用# change where to find_by
@purchase_order_list = PurchaseOrderList.find_by(PURCHASE_ORDER: params[:ID])
# and then this will work
@stockdiary = Stockdiary.create(PRODUCT: @purchase_order_list.PRODUCT, UNITS: @purchase_order_list.UNITS, PRICEBUY: @purchase_order_list.PRICEBUY)
所以你可以这样做:
where
或者......如果你想要@purchase_order_list = PurchaseOrderList.where(PURCHASE_ORDER: params[:ID])
# and then loop through you potentially multiple records in @purchase_order_list
@purchase_order_list.each do |po|
@stockdiary = Stockdiary.create(PRODUCT: po.PRODUCT, UNITS: po.UNITS, PRICEBUY: po.PRICEBUY)
end
或者可能有多条记录,那么你可以循环:
first
或使用@stockdiary = Stockdiary.create(PRODUCT: @purchase_order_list.first.PRODUCT, UNITS: @purchase_order_list.first.UNITS, PRICEBUY: @purchase_order_list.first.PRICEBUY)
:
class PurchaseOrder
accepts_nested_attributes_for :purchase_order_list
end
通常这意味着您没有将accepts_nested_attributes_for放在PurchaseOrder模型中。
<击>的的PurchaseOrder 强> 撞击>
<击>pip install --help
击> <击> 撞击>