Rails 3:使用其他属性连接表

时间:2012-08-23 17:55:29

标签: ruby-on-rails ruby-on-rails-3 jointable

我有一个简单的购物车系统,我已经为应用程序工作了一段时间,我需要一些帮助,试图找出如何更新连接表中的特定属性(订单和产品之间)。

以下是代码:

def add_product_to_cart
        @product = Product.by_client(current_client).first 
        @order = current_order
        unless @order.products.exists? :id => @product.id
            @order.products << @product
        end
    end

我在更新@order.products ...

时尝试更新特定属性

这就是我想要做的: @order.products << @product - &gt;发生这种情况时,我需要更新:price属性..

无论如何这样做?

2 个答案:

答案 0 :(得分:1)

class Order
  has_many :products
  def price
    products.sum(:price)
  end
end

就在我的头顶。这是总和参考:

http://ar.rubyonrails.org/classes/ActiveRecord/Calculations/ClassMethods.html#M000296

答案 1 :(得分:1)

希望将属性放入连接表可能是缺少模型的标志。您可以通过向其添加主键将联接表提升为模型,例如OrderItem。然后OrderProduct中的HABTM关联成为has_many through关联。新模型将是设置回调的好地方,该回调填充price属性。它还可以解锁其他好处,例如为项目加上时间戳并使其act_as_list等等。