Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 在Rails 3中合并记录_Ruby On Rails 3_E Commerce - Fatal编程技术网

Ruby on rails 3 在Rails 3中合并记录

Ruby on rails 3 在Rails 3中合并记录,ruby-on-rails-3,e-commerce,Ruby On Rails 3,E Commerce,我有Transaction对象,它们组合在Cart对象中。一些交易对象属于产品,另一些属于服务。我想在将类似的交易添加到购物车时将它们合并起来(即使用新的价格和数量信息更新现有记录) 以下是我目前拥有的(未经测试): 然而,我觉得这是非常庞大的,可能有一个更好的方式做它。因此,在我进一步讨论之前,是否有任何内置的或更好的方法以这种方式更新现有对象 谢谢 假设您的事务可以属于产品或服务,那么多态关联似乎是您的最佳选择,并且可能会使您现有的问题变得更简单 看看这本书 我想你会喜欢它并学到很多东西。那

我有
Transaction
对象,它们组合在
Cart
对象中。一些
交易
对象
属于
产品
,另一些
属于
服务
。我想在将类似的
交易添加到购物车时将它们合并起来(即使用新的价格和数量信息更新现有记录)

以下是我目前拥有的(未经测试):

然而,我觉得这是非常庞大的,可能有一个更好的方式做它。因此,在我进一步讨论之前,是否有任何内置的或更好的方法以这种方式更新现有对象


谢谢

假设您的事务可以属于产品或服务,那么多态关联似乎是您的最佳选择,并且可能会使您现有的问题变得更简单

看看这本书


我想你会喜欢它并学到很多东西。

那么一笔交易可以属于一种产品,也可以属于一种服务?是的,这是正确的。而且,产品和服务没有合并到STI中的原因是,它们的字段差异太大,并且随着时间的推移可能会发生很多变化。然而,我现在正计划将它们组合成一个多态关联(正如下面ardavis所建议的),这应该会简化一点。但是,接下来的问题是,在我的示例中,这段代码的其余部分是实现这一点的最佳方式吗?好的,我刚刚查看了这段视频,并且肯定认为多态关联是一种方式(我最初没有做这件事,现在将实现它,为此感谢+1!)。但是,这对上面的代码有什么影响?我仍然需要检查它是产品还是服务,然后以同样的方式更新这些变量,对吗?我将不得不让其他人尝试一下,:)很高兴我能帮助一些人。
def update_cart
  if current_cart.transactions.find(:conditions => [service_id = self.service_id])
    @utransaction = current_cart.transaction.find(:conditions => [service_id = self.service_id])
    @utransaction.price = @utransaction.price + self.price
    @utransaction.save
  elsif current_cart.transactions.find(:conditions => [product_id = self.product_id])
    @utransaction = current_cart.transactions.find(:conditions => [product_id = self.product_id])
    @utransaction.price = @utransaction.price + self.price
    @utransaction.quantity = @utransaction.quantity + self.quantity
    @utransaction.save
  else
    nil
  end
end