【问题标题】:Rails 3.1 - has_and_belongs_to_many deprecated?Rails 3.1 - has_and_belongs_to_many 已弃用?
【发布时间】:2011-10-21 13:30:13
【问题描述】:

我目前有一个应用程序 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);

has_and_belongs_to_many 在 Rails 3.1 中完全弃用了吗?我尝试升级到 3.1,但我正在使用一些尚未更新的 gem,所以我要等待一段时间,但理想情况下,我希望我的部分代码能够顺利运行。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    它已被弃用,但仍然存在。它不会检查来查看连接表上是否有属性,它只是让你知道。它仍然有效。

    【讨论】:

    • 好的,简单的回答!除此之外,我设置了 ActiveSupport::Deprecation.silenced = true 以避免在每次运行 rspec 测试时重复看到此消息。您知道是否有更精细的方法来关闭弃用警告?
    • 建议尝试花时间重构到 has_many :through now。尽可能避免关闭弃用警告。
    • @MichaelDurrant 是 habtm 已被弃用,还是额外的属性? Rails 指南说只有属性被弃用,而不是habtm 本身。不过,我可能误读了它。
    • habtm 没有被弃用,Rails 官方指南仍然推荐它:guides.rubyonrails.org/… - 所以不需要重构它,我也没有收到任何弃用警告。
    • @iGEL 弃用警告取决于您实际在做什么:对于问题中描述的用例,它弃用了,这就是 Rails 开发人员在弃用消息说使用 has_many:through 连接具有附加数据的表。您提供的链接具体声明相同:“如果您需要验证、回调、或连接模型上的额外属性,您应该使用 has_many :through”(强调我的)。
    猜你喜欢
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2011-09-27
    相关资源
    最近更新 更多