【发布时间】:2014-01-22 09:31:16
【问题描述】:
我正在为购物网站开发一项用于创建特价商品的功能。一种产品可以有不止一种特价商品,很明显一种特价商品可以有不止一种商品。
我使用的是has_and_belongs_to_many 关系,所以我声明:
产品.rb
has_and_belongs_to_many :specials
特殊.rb
has_and belongs_to_many :products
现在,有了产品@product 和特殊的@special,就会像这样创建一个关联......
@special.products << @product
这样做之后,以下是正确的:
@special.products.first == @product
而且,重要的是:
@product.specials.first == @special
当我使用这个删除关联时
@special.products.delete(@product)
然后@product从特价中删除,所以@special.products.first==nil,但是@product 仍然包含 @special,换句话说@products.specials.first==@special
除了编写删除方法之外,还有什么合适的方法可以在一次调用中执行此操作吗?
【问题讨论】:
-
顺便问一下,为什么反引号不能把单词变成代码?抱歉,这是我在 Stackoverflow 上的第一篇文章
-
backticks仅适用于字符串 - 如果您有代码块,则应缩进 4 个空格 -
我认为它确实删除了两种方式的关联,您是否尝试过重新加载
@special? -
xlembouras 是正确的。
@special.products.delete(@product)实际上确实删除了双方的关联,因为它删除了连接表中的记录(即product_specials)。尝试@product.reload.specials或告诉.specials通过传递true重新获取连接表记录,就像@product.specials(true)一样。见here。 -
您也可以在第一行之前使用三个反引号,在最后一行使用三个反引号。如果你想强制颜色编码,你可以在前三个反引号之后写,就像
'''ruby \n def myCode end \n '''
标签: ruby-on-rails ruby-on-rails-3 has-and-belongs-to-many