繁体   English   中英

在Rails中使用迁移关联两个表

[英]Relating two tables with migration in Rails

目标

users表与users_photos表相关联。

问题

我只是不知道该怎么做。

场景

这是我表达的用于创建users_photos表的命令行:

rails generate migration CreateUsersPhotos image_url:string thumbnail_url:string user:references

它创建索引user_id ,但没有任何外键。 我听说Rails不会创建外键,因为SQLite不支持该功能。 它继续,对吗? 也许外国人可以帮忙吧?

关键是:当我生成迁移并执行rake db:migrate ,会创建任何模型。 换句话说,只创建表,我无法与模型交互以向其添加外键。

毕竟,问题是什么?

  1. 当我运行rake db:migrate ,它不会创建模型。 为什么?
  2. 如何将外键添加到users_photos 删除用户时,我需要删除user_photo的条目。
  1. 迁移不会创建模型。 运行rails generate model UserPhotos ...以创建迁移和模型。 否则,您需要手动创建模型。 不要担心外键,没有它们的轨道处理关联就好了。

  2. 我个人更喜欢在迁移中执行user_id:integer ,但是你拥有它的方式应该可行。 如果要将新模型记录与其父项一起删除,请使用

     # User model has_many :user_photos, dependent: :destroy` 

迁移和模型。 迁移与数据库模式有关:表,行和所有内容。 因此,rake db:migrate不会为您创建任何模型。 你需要自己做。 例如,像这样:

rails generate model User name:string

它将为您生成适当的模型和迁移(该迁移包含生成“用户”表的代码)。

外键。 你是对的。 Rails不会创建外键。 无论如何,有几种方法(raw sql)。 但这些都是糟糕的选择 你可以做的是将这种逻辑 (删除相关记录) 放在模型中 这是Rails协会指南链接 您可以通过以下方式声明性地声明删除关联记录:

class User < ActiveRecord::Base
  has_many :photos, dependent: :destroy
end

您可以指定外键,如用户有很多帖子,但在帖子中它保存为author_id

class User < ActiveRecord::Base
has_many :posts, dependent: :destroy, :foreign_key => :author_id
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM