【问题标题】:Ruby on Rails does not generate foreign key from associationRuby on Rails 不会从关联中生成外键
【发布时间】:2016-06-06 16:57:47
【问题描述】:

我有两个设置两个数据库表,分别称为“积分”和“活动”。我想通过如下设置关联来为表“points”提供一个外键“activity_id”:

class Activity < ActiveRecord::Base
   belongs_to :user
   has_many :points, dependent: :destroy
   ...
end

class Point < ActiveRecord::Base

    belongs_to :activity

end

此外,我还有以下用于创建点表的迁移文件:

class CreatePoints < ActiveRecord::Migration
  def change
    create_table :points do |t|

      t.integer :activity_id
      t.timestamps null: false
      t.boolean :activities_completed, array: true, default: []
      t.integer :point_value
      t.float :time_left    


    end
  end
end

但是,当我跑步时

rake db:reset
rake db:migrate
rake db:seed

然后检查表格点

rails c
Point.column_names

那么外键丢失了:

irb(main):001:0> Point.column_names
=> ["id", "created_at", "updated_at", "activities_completed", "point_value", "time_left"]

我做错了什么?如何使外键 activity_id 成为积分表的列?

我是 Ruby 和 Rails 的新手。我的 Rails 版本是 4.24。任何帮助表示赞赏。

【问题讨论】:

    标签: ruby-on-rails rails-migrations


    【解决方案1】:

    您的创建表迁移应该有一个“t.belongs_to :activity, index: true”,而不是使用整数类型创建字段 activity_id。

    【讨论】:

      【解决方案2】:

      您应该这样做以将 activity_id 添加到您的积分表中。

      t.references :activity, index: true, foreign_key: true
      #this would have created activity_id column in points
      

      从现在开始,您已经创建了迁移并运行了rake db:migrate,学习从表中删除列。您需要编写迁移以从积分表中删除 activity_id 并再次添加。

      rails generate migration RemoveActivityIdFromPoints activity_id:integer
      rails g migration AddActivityRefToPoints activity:references
      

      这两个应该为您创建适当的迁移。检查您的迁移文件夹以确认一切顺利,然后运行 ​​rake db:migrate 并再次测试。

      点击此链接了解更多信息。 http://guides.rubyonrails.org/active_record_migrations.html

      【讨论】:

        【解决方案3】:

        我发现还有一个更根本的问题。 rake db:migrate 期间未执行迁移脚本。因此,我对迁移所做的更改是无效的。因此我不得不使用

        rake db:migrate:redo VERSION=20160605234351
        

        当我运行这个命令时,外键出现了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-21
          • 1970-01-01
          • 2021-11-23
          • 1970-01-01
          相关资源
          最近更新 更多