当前位置:  开发笔记 > 编程语言 > 正文

Scaffolding ActiveRecord:两列相同的数据类型

如何解决《ScaffoldingActiveRecord:两列相同的数据类型》经验,为你挑选了2个好方法。

另一个基本的Rails问题:

我有一个数据库表,需要包含对特定数据类型的两个不同记录的引用.

假设的例子:我正在制作视频游戏数据库.我有一张"公司"表.我希望每个"Videogame"条目只有一个开发人员和一个发布者.

我知道,如果我想拥有一家公司,我可以做以下事情:

script/generate Videogame company:references

但我需要两家公司.我宁愿不使用连接表,因为只能有两个给定的数据类型,我需要它们是不同的.

似乎答案应该非常明显,但我无法在互联网上的任何地方找到它.



1> Jon Wood..:

只是为了整理一下,在您的迁移中,您现在也可以:

create_table :videogames do |t|
  t.belongs_to :developer
  t.belongs_to :publisher
end

因为你正在调用密钥developer_id和publisher_id,所以模型应该是:

belongs_to :developer, :class_name => "Company"
belongs_to :publisher, :class_name => "Company"

这不是一个主要问题,但我发现随着额外参数的关联数量增加,事情变得越不清晰,所以最好尽可能坚持默认值.



2> mlibby..:

我不知道如何使用script/generate执行此操作.

无论如何不使用脚本/生成更容易显示基本思想.您希望视频游戏表/模型中有两个字段,用于保存公司表/模型的外键.

我会告诉你我认为代码会是什么样子,但我还没有测试过,所以我可能错了.

您的迁移文件包含:

create_table :videogames do |t|
  # all your other fields
  t.int :developer_id
  t.int :publisher_id
end

然后在你的模型中:

belongs_to :developer, class_name: "Company", foreign_key: "developer_id"
belongs_to :publisher, class_name: "Company", foreign_key: "publisher_id"

您还提到希望两家公司不同,您可以在模型中进行验证,以检查它developer_id != publisher_id.


代码会是什么样子,但我还没有测试过,所以我可能错了.
推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有