1

所以我正在尝试创建三个模型ProjectEntryUser。AProject有很多Entries,而 aaUser有很多Entries。我使用以下命令搭建了上述三个模型:

rails g scaffold Project title:string

rails g scaffold Entry project:project_id entry_for:user_id created_by:userid \
date:string start_time:string end_time:string total:string type_of_work:string \
on_off_site:string phase:string description:text 

rails g scaffold User name:string

我意识到我可能完全搞砸了我手动输入Entry模型中其他表的外键的部分。我不知道在键方面使不同模型之间的关系自动化多少has_many belongs_to,所以我尝试手动添加外键字段。这是错的吗?

当我尝试运行时db:migrate,出现以下错误:

undefined method `user_id' for #<ActiveRecord::ConnectionAdapters::TableDefinition:0x007fc1bdf37970>

这是我的迁移,因为我试图删除所有外键字段但出现上述错误。

class CreateProjects < ActiveRecord::Migration
  def change
    create_table :projects do |t|
      t.string :name

      t.timestamps
    end
  end
end

class CreateEntries < ActiveRecord::Migration
  def change
    create_table :entries do |t|
      t.string :project
      t.string :project_id
      t.user_id :entry_for
      t.user_id :created_by
      t.string :date
      t.string :start_time
      t.string :end_time
      t.string :total
      t.string :type_of_work
      t.string :on_off_site
      t.string :phase
      t.text :description

      t.timestamps
    end
  end
end

class CreateUsers < ActiveRecord::Migration
   def change
    create_table :users do |t|
      t.string :name

      t.timestamps
    end
  end
end

class RemoveColumns < ActiveRecord::Migration
  def self.up
    remove_column :entries, :created_by
    remove_column :entries, :entry_for
    remove_column :entries, :project_id
  end
  def self.down
    add_column :entries, :created_by, :user_id
    add_column :entries, :entry_for , :user_id
    add_column :entries, :project_id, :string
  end
end

谢谢您的帮助!

4

2 回答 2

1

在您的迁移中,t.user_id您可以尝试t.integert.index。这至少应该让你的迁移运行。

于 2013-08-13T19:36:15.660 回答
0

我将使用t.references entry_for然后belongs_to :entry_for, class_name: "User"Entry模型中写入作为编写我自己的外键名称的一种方式。对于中的project专栏,entries我意识到我可以类似地写t.references project.

于 2013-08-13T19:45:32.647 回答