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_id
、rated_by_user_id
,您必须通过 rails 命令使用占位符值创建迁移,然后根据需要修改它迁移文件,请参阅更新的答案@VMG。以上是关于Ruby on Rails - rails g 脚手架外键的主要内容,如果未能解决你的问题,请参考以下文章
思考Ruby On Rails的底层代码(Ruby on Rails 開發秘籍 | Ruby on Rails 快速入門)