1

そこで、Project、 、 の3 つのモデルを作成しようEntryとしていますUser。AProjectは多数Entriesあり、aaUserは多数ありEntriesます。上記の 3 つのモデルを次のコマンドでスキャフォールディングしました。

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

0

t.references entry_for独自の外部キー名を記述する手段としてbelongs_to :entry_for, class_name: "User"、モデルを使用して書き込みます。Entryproject列については、entries同様に書くことができることに気づきましたt.references project

于 2013-08-13T19:45:32.647 に答える