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

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

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

【问题讨论】:

    标签: mysql ruby-on-rails scaffolding


    【解决方案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。
    猜你喜欢
    • 2015-01-04
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2011-10-09
    • 2013-11-06
    • 2012-06-03
    • 2011-12-18
    相关资源
    最近更新 更多