Ruby on Rails - rails g 脚手架外键

Posted

技术标签:

【中文标题】Ruby on Rails - rails g 脚手架外键【英文标题】:Ruby on Rails - rails g scaffold foreign key 【发布时间】:2021-09-18 20:33:12 【问题描述】:

我是 ruby​​ 新手,我想用表用户、角色和用户角色创建数据库。我的问题是我应该使用脚手架还是其他东西?以及如何在此表中添加自动增量 ID?以及如何添加外键?

rails g scaffold User name:string surname:string  && rails generate scaffold Role name:string id:integer 

【问题讨论】:

【参考方案1】:

我应该使用脚手架还是其他东西?

如果您需要的是项目中与该特定表/模型相关的所有文件和更改,您可以使用脚手架。脚手架将添加资产、模型、控制器甚至测试。如果您觉得不需要它,您可以创建一个迁移来处理数据库中的表创建,仅此而已。另一方面,如果您需要更多,您可以创建一个模型 (rails g model ...),依此类推。

以及如何在此表中添加自动增量 ID?

按照惯例,Rails 将在您的表中添加一个id 列,除非另有说明。根据您的数据库,它将使用 AUTO INCREMENT 子句,如果使用 Postgres,则使用 SERIAL。由于它支持多个关系数据库管理系统,因此有很多选择。

以及如何添加外键?

在创建脚手架、模型或迁移时,您可以使用references 选项。在您的情况下,如果您有一个 User 和 UserRole 模型/表,它看起来像这样:

rails g scaffold User name && rails g scaffold UserRole user:references

您可以查看Rails guides 了解有关迁移的更多信息。


对给定问题的补充:

class ... < ActiveRecord::Migration[5.0]
  def change
    create_table :... do |t|
      t.references :user_id_rated, references: :users, foreign_key: true
      t.references :rated_by_user_id, references: :users, foreign_key: true
      ...
    end
  end
end

【讨论】:

谢谢。你能再说一件事吗?我希望分配一个用户来评价另一个用户。所以我需要带有 userid、userid2、ratings 的表:rails g scaffold User name && rails g scaffold UserReview rating:integer user:references user2:references. 当然,在这种情况下,您的列将类似于 rate_user_idrated_by_user_id,您必须通过 rails 命令使用占位符值创建迁移,然后根据需要修改它迁移文件,请参阅更新的答案@VMG。

以上是关于Ruby on Rails - rails g 脚手架外键的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu搭建Ruby on Rails环境

如何使下拉表单在 Ruby On Rails 中工作

Ruby On Rails,制作可排序列表

Ruby on Rails 的最佳位置 IP

思考Ruby On Rails的底层代码(Ruby on Rails 開發秘籍 | Ruby on Rails 快速入門)

ruby on rails flash 消息 - :alert :error :notice 和 :success?