2012-12-06 55 views
0

我一直在使用Michael Hartl的教程,我试图创建一个名为“食谱”的新模型,以允许用户发布食谱。该模型基本上与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 

使用命令创建:轨生成模型微柱的内容:字符串USER_ID:整数

我有但问题是,主键在这两个表中都是user_id。这会工作,或者当我尝试输入配方时,它会尝试从microposts表中取出吗?在此先感谢

+1

对不起,我还应该提到:食谱中的代码被输入与上面相同:唯一的区别是,它说:“CreateRecipes “而不是”CreateMicroposts在顶部,并且它具有create_table方法它代表食谱,索引在两个 – blc09002

回答

0

当我去试图进入一个配方时,它会尝试从microposts表中取而代之?

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

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

这听起来像你可能对表的主键有什么根本的误解,也许可能是数据库表的工作原理;但现在这超出了这个问题的范围。


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

rails generate model MicroPost content:string user_id:integer 

(注意大写PMicroPost。这是一个更好的名称,将在您的数据库中创建一个micro_posts表。

0

主键不是两个表中的任何一个中的user_id。每个模型都会生成一个包含用作PK的隐式数字自动增量ID列的表。

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

无论如何,你应该在你的食谱迁移更改add_index声明:

add_index :recipes, [:user_id, :created_at]