Rails 3.1 - has_and_belongs_to_many废弃了吗?

4

我有一个应用程序,目前是Rails 3.0.9版本,具有非常简单的多对多关系:

class User < ActiveRecord::Base
  has_and_belongs_to_many :stores, :join_table => "users_stores"
end

我发现下面这个警告信息不断弹出:

警告:在 has_and_belongs_to_many 关联的连接表上添加附加属性已经过时,将在 Rails 3.1 中删除,请改用 has_many :through 关联。

问题是,我没有在连接表上添加任何额外的属性:

sqlite> .schema users_stores
CREATE TABLE "users_stores" ("user_id" integer, "store_id" integer);

在Rails 3.1中,has_and_belongs_to_many是否完全被弃用了?我尝试升级到3.1,但我使用了一些尚未更新的gems,所以我还需要等待一段时间,但理想情况下,我希望我的代码能够正常运行。

1个回答

3

虽然它已被弃用,但仍然存在。它不会检查加入表上是否有属性,只是让你知道。它仍然可以工作。


好的,非常简单明了的答案!此外,我已经设置了ActiveSupport :: Deprecation.silenced = true,以避免每次运行rspec测试时重复看到此消息。您知道是否有更细粒度的方法来关闭弃用警告吗? - asc99c
1
建议尝试抽时间立即重构为 has_many :through。如有可能,应尽量避免关闭弃用警告。 - Michael Durrant
@MichaelDurrant 是 habtm 被弃用了,还是额外的属性?Rails指南只说额外的属性被弃用了,而不是 habtm 本身。不过我可能理解有误。 - Dave Newton
2
habtm并没有过时,官方的Rails指南仍然推荐使用它:http://guides.rubyonrails.org/association_basics.html#choosing-between-has_many-through-and-has_and_belongs_to_many - 因此不需要重构,我也没有收到任何弃用警告。 - iGEL
@iGEL 警告的弃用取决于您实际要做什么:对于问题描述中所述的用例,它已被弃用,这就是Rails开发人员放置弃用消息并建议使用has_many:through来处理具有附加数据的联接表的原因。您提供的链接明确指出了同样的内容:“如果您需要验证、回调或联接模型上的额外属性,则应使用has_many:through”(我强调)。 - Dave Newton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接