【问题标题】:Creating new rails migrations error创建新的 Rails 迁移错误
【发布时间】:2012-12-06 23:04:14
【问题描述】:

我一直在使用 Michael Hartl 的教程,并且正在尝试创建一个名为“Recipe”的新模型,以允许用户发布食谱。该模型本质上与微博模型相同,因为用户应该能够发布许多食谱,并且所有食谱都应该链接到一个用户。因此,我使用了与 micropost 相同的命令和迁移:

class CreateMicroposts < ActiveRecord::Migration
  def change
    create_table :microposts do |t|
      t.string :content
      t.integer :user_id

      t.timestamps
    end

    add_index :microposts, [:user_id, :created_at]
  end
end

使用命令创建:rails generate model Micropost content:string user_id:integer

我遇到的问题是两个表中的主键都是 user_id。这会起作用吗,或者当我尝试输入食谱时,它会尝试从微帖子表中提取吗?提前致谢

【问题讨论】:

  • 对不起,我还要提一下:食谱的代码输入与上面相同:唯一的区别是它在顶部显示“CreateRecipes”而不是“CreateMicroposts”,并且它具有 create_table 方法它说的是食谱。索引在两者中是相同的

标签: ruby-on-rails migration


【解决方案1】:

当我尝试输入菜谱时,它会尝试从 microposts 表中提取吗?

否。默认情况下,应用程序中的Recipe 模型将与数据库中的recipes 表进行交互。同样,Micropost 模型默认会与数据库中的microposts 表交互。

只要您使用Recipe 模型,Recipe 的实例就不会从microposts 表中拉出。

听起来您可能对表的主键的用途以及数据库表的工作方式存在根本性的误解;但现在这超出了这个问题的范围。


顺便说一句,你可能应该这样做

rails generate model MicroPost content:string user_id:integer

(注意MicroPost 中的大写P)。这是该类的更好名称,它将在您的数据库中创建一个micro_posts 表。

【讨论】:

    【解决方案2】:

    主键不是两个表中的任何一个中的 user_id。每个模型都会生成一个带有隐式数字自增 id 列的表,该列用作 PK。

    add_index 所做的是在 user_id 列上添加一个索引。索引不是 PK。

    无论如何,您应该将您的食谱迁移中的 add_index 语句更改为:

    add_index :recipes, [:user_id, :created_at]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 2015-04-04
      • 2012-09-02
      相关资源
      最近更新 更多