0

我一直在使用 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。这会起作用吗,或者当我尝试输入食谱时,它会尝试从微帖子表中提取吗?提前致谢

4

2 回答 2

0

当我尝试输入食谱时,它会尝试从微博表中提取吗?

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

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

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


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

rails generate model MicroPost content:string user_id:integer

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

于 2012-12-06T15:03:42.160 回答
0

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

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

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

add_index :recipes, [:user_id, :created_at]
于 2012-12-06T15:04:14.827 回答