【问题标题】:generating model with ActiveRecord associations使用 ActiveRecord 关联生成模型
【发布时间】:2026-01-27 20:45:01
【问题描述】:

伙计们,

我正在创建一个应用程序,其中我的问题空间中有两个实体。一个实体是“生物学家”,另一个实体是“实验”,现在一个生物学家可以有多个实验,每个实验可以有多个生物学家。

我知道如何使用命令行生成器创建模型和路由:

 rails generate scaffold Biologist name:string expertise:string last_pub:text

添加关联的正确方法是什么?生成后是否要更新模型代码?我不清楚的是,如果我在生成后添加“belongs_to”关联,那么它如何在不运行迁移或其他东西的情况下反映在数据库模式中?在上面的示例中,如果“实验”属于“生物学家”,那么“生物学家”表中将有一个外键,如果我在生成后的模型类中添加关联,它将如何创建。我对 Rails 很陌生,所以如果这是一个幼稚的问题,我深表歉意。

【问题讨论】:

    标签: ruby-on-rails rails-activerecord


    【解决方案1】:

    我认为您正在寻找类似以下的内容:

    rails g scaffold Biologist experiment:references
    

    阅读 Jose Valim 的 this article,他向您展示了如何执行上述操作,并从命令行添加 db 索引:

    【讨论】:

    • 自己试试rails g scaffold Biologist title:index email:uniq。您将看到创建索引所需的代码自动添加到您的迁移中。它节省了一些输入,意味着你可以运行你的迁移并继续前进。
    • ic...我错误地认为您是在建议直接从命令行对架构进行更改。我的错。
    【解决方案2】:

    您必须创建迁移以将biologist_id 列添加到experiments 表中,然后在您的experiments 模型中添加belongs_to :biologist 关系。

    您可以找到更多详细信息here

    【讨论】:

      【解决方案3】:

      我会为每个模型生成一个模型,然后创建一个连接表,因为你有一个多对多的关系。如果你正确地遵循约定,rails 应该理解给定连接表的关系。

      一般来说,如果您需要修改活动记录关系,您应该在模型中使用 has_many 或 has_and_belongs_to_many 关系进行。

      【讨论】: