2017-09-11 36 views
0

我在Cart模型的方法:如何获取未保存在数据库中的对象的ID?

def add_product_with_variant(product_id, variant_id) 
    current_item = line_items.find_by(product_id: product_id) 
    if current_item 
    current_item.amount += 1 
    line_item_variant = LineItemVariant.new(variant_id: variant_id, line_item_id: current_item.id) 
    line_item_variant.save 
    else 
    current_item = line_items.build(product_id: product_id) 
    line_item_variant = LineItemVariant.new(variant_id: variant_id, line_item_id: current_item.id) 
    line_item_variant.save! 
    end 
end 

else发言中,我使用LineItemvariant.new(variant_id: variant_id, line_item_id: current_item.id)variant分配给line_item。但在这种情况下,我不能保存LineItemVariant,因为line_item尚不存在,我不能使用这部分代码:line_item_id: current_item.id。有没有解决方案来获得ID,或者有更简单的方法来解决这个问题?谢谢你。

+1

创建'current_it em'而不是'build',然后使用它的'id'。 – Pavan

回答

0

您可以使用accepts_nested_attributes_for

里面你LineItemVariant模型定义

accepts_nested_attributes_for :line_item # or whatever relation is towards this item 

,然后改变你的else语句

尝试对象转换成JSON传递时使用to_json

def add_product_with_variant(product_id, variant_id) 
    current_item = line_items.find_by(product_id: product_id) 
    if current_item 
    current_item.amount += 1 
    line_item_variant = LineItemVariant.new(variant_id: variant_id, line_item_id: current_item.id) 
    line_item_variant.save 
    else 
    current_item = line_items.build(product_id: product_id) 
    line_item_variant = LineItemVariant.new(variant_id: variant_id, line_item: current_item.to_json) 
    line_item_variant.save! 
end 
+0

它给出了一个错误:'验证失败:行项目必须存在' –

+0

尝试将传递对象作为json – Nermin

+0

新'line_item'的'id'仍然是'nil' –

相关问题