用下划线命名的模型之间的 HABTM 关联
HABTM association between models named with underscore
我遇到了以下问题:
我的 Rails 应用程序有很多模型,但我对其中两个模型之间的关联有疑问:
class RedArticle < ActiveRecord::Base
has_and_belongs_to_many :red_sections
end
class RedSection < ActiveRecord::Base
has_and_belongs_to_many :red_articles
end
似乎是标准设置。但是当我用
测试关联时
RedArticle.first.red_sections
然后我得到以下错误:
ActiveRecord::StatementInvalid: Mysql2::Error: Table
'clubago.red_articles_sections' doesn't exist: SHOW FULL FIELDS FROM
red_articles_sections
所以我的 Rails 查找名为 red_articles_sections
的 table 而不是 red_articles_red_sections
(它存在于我的数据库中)。有人知道这个问题来自哪里吗?我尝试将数据库重命名为 red_articles_sections
并且成功了,但我认为这不是一个好的解决方案。
这会有帮助吗
class RedArticle < ActiveRecord::Base
has_and_belongs_to_many :red_sections, join_table: "red_articles_red_sections"
end
class RedSection < ActiveRecord::Base
has_and_belongs_to_many :red_articles, join_table: "red_articles_red_sections"
end
参考:http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many(选项)
实际上,这是故意的。 Rails docs 解释一下:
If your tables share a common prefix, it will only appear once at the beginning. For example, the tables “catalog_categories” and “catalog_products” generate a join table name of “catalog_categories_products”.
所以,您的快速修复是正确的。但是,我个人的建议是从您的两个模型中删除 Red
前缀——除非您的架构中某处有一个名为 Article
的不同模型,否则 Red
真的会添加任何东西吗?
也可以,如果您想保留旧的连接 table 名称。
我遇到了以下问题: 我的 Rails 应用程序有很多模型,但我对其中两个模型之间的关联有疑问:
class RedArticle < ActiveRecord::Base
has_and_belongs_to_many :red_sections
end
class RedSection < ActiveRecord::Base
has_and_belongs_to_many :red_articles
end
似乎是标准设置。但是当我用
测试关联时RedArticle.first.red_sections
然后我得到以下错误:
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'clubago.red_articles_sections' doesn't exist: SHOW FULL FIELDS FROM
red_articles_sections
所以我的 Rails 查找名为 red_articles_sections
的 table 而不是 red_articles_red_sections
(它存在于我的数据库中)。有人知道这个问题来自哪里吗?我尝试将数据库重命名为 red_articles_sections
并且成功了,但我认为这不是一个好的解决方案。
这会有帮助吗
class RedArticle < ActiveRecord::Base
has_and_belongs_to_many :red_sections, join_table: "red_articles_red_sections"
end
class RedSection < ActiveRecord::Base
has_and_belongs_to_many :red_articles, join_table: "red_articles_red_sections"
end
参考:http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many(选项)
实际上,这是故意的。 Rails docs 解释一下:
If your tables share a common prefix, it will only appear once at the beginning. For example, the tables “catalog_categories” and “catalog_products” generate a join table name of “catalog_categories_products”.
所以,您的快速修复是正确的。但是,我个人的建议是从您的两个模型中删除 Red
前缀——除非您的架构中某处有一个名为 Article
的不同模型,否则 Red
真的会添加任何东西吗?