Ticket has_many :products
和Product belongs_to :ticket
这段代码:
def prepare
@ticket = Ticket.last
if @ticket.status != "open"
@ticket = Ticket.create!
end
@ticket.products<<(Product.find(params[:id]))
respond_to :js
end
如果@ticket中已存在同一产品(具有相同ID)的任何实例,将不会向@ ticket.products添加新产品。我希望能够在一张票中添加两个相同的产品 - 顾客应该可以订购两种相同的啤酒,不应该吗?
我挖掘了here in edgeguides,但似乎只是避免重复,而不是启用它。
答案 0 :(得分:1)
听起来更像是多对多的关系,可以通过has_many来管理:通过关联:
http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association
考虑购物车示例,客户可以通过订单项订购多个相同产品,该订单项有数量。
答案 1 :(得分:0)
您可以尝试使用arel gem:
添加尚未添加的产品@ticket.products << Product.where(Product.arel_table[:id].eq(params[:id])
.and(Product.arel_table[:ticket_id].not_eq(@ticket.id)))
或ruby-on-rails-4您可以使用where.not
否定:
@ticket.products << Product.where(id: params[:id]).where.not(ticket_id: @ticket.id)