gpt4 book ai didi

mysql - rails 引擎 : Namespacing foreign key references to other models in the same engine

转载 作者:可可西里 更新时间:2023-11-01 07:20:12 27 4
gpt4 key购买 nike

我已经为名为 TestAppTv 的数据库设置了一个带有 MySQL 的命名空间 Rails 3.2.19 引擎,它有 2 个模型:发布和评论。

我希望 Comments 属于 Posts,但我希望它具体引用 TestAppTv::Post。我知道我可以通过指定 class_name 以及我的 belongs_to/has_many 调用来做到这一点。

module TestAppTv
class Comment < ActiveRecord::Base
belongs_to :post, class_name: "TestAppTv::Post"
attr_accessible :text
end
end

module TestAppTv
class Post < ActiveRecord::Base
has_many :comments, class_name: "TestAppTv::Comment"
attr_accessible :text, :title
end
end

现在,我的困惑在于数据库。 test_app_tv_comments 表中默认的 foreign_key 似乎是“post_id”。但是,在我看来,这并没有遵循与应用程序其余部分相同的命名空间思想。 post_id 是指 test_app_tv_posts.id 还是来自基本应用程序或其他引擎的一些基本 posts.id 表似乎是模棱两可的。

是否有一些正确的方法来命名 rails 默认使用的所有内置魔法的 foreign_key?

当我尝试使用 foreign_key 手动将 key 指定为 test_app_tv_post_id 时,我最终遇到了很多关于“逆向”的问题,并且默认的魔术助手不再工作。例如,执行 TestAppTv::Comment.create(post: TestAppTv::Post.first, text: "test") 不起作用,我必须自动指定 foreign_key 字段。

感谢您就此主题提供任何建议或帮助!我很感激!

最佳答案

如果以后有人找到这篇文章并且像我一样对为什么外键没有命名空间相同感到困惑,答案是它没有命名空间并不重要。

由于 Ruby 通过首先在当前模块中查找然后向上查找模块树到基本命名空间来处理类查找,所以在同一 Rails 引擎中定义的模型在引擎包含在基本应用程序中定义的任何模型之前使用. 这意味着“post_id”字段对于引用特定 TestAppTv::Post 的命名空间引擎就足够了,因为 TestAppTv::Post 是在 TestAppTv 引擎模块中查找类“Post”时首先找到的内容。

据我所知,这在任何地方都没有提到,所以我认为这可能只是假定为常见的 ruby​​ 知识。我希望这可以帮助其他人。

关于mysql - rails 引擎 : Namespacing foreign key references to other models in the same engine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26370656/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com