2013-08-13 1 views
1

그래서 세 가지 모델, Project, EntryUser을 만들려고합니다. A Project에는 Entries이 많이 있고 a에는 많은 Entries가 있습니다. 나는 다음과 같은 명령으로 위의 세 가지 모델을 스캐 폴딩 : 나는 아마 완전히 내가 수동으로 Entry 모델에서 다른 테이블의 외래 키에 넣어 부분을 놓 쳤어 실현레일 : 데이터베이스 관계를 이해하는 데 문제가 있습니다

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 

. 나도 모르겠다. has_manybelongs_to 키의 측면에서 다른 모델 간의 관계를 자동화하므로 외래 키 필드를 수동으로 추가하려고 시도했다. 잘못인가? 내가 외래 키 필드를 모두 제거하려하지만, 위의 오류를 가지고 여기

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

, 내 마이그레이션은 다음과 같습니다

나는 다음과 같은 오류가 db:migrate를 실행하려고

.

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 

감사합니다.

답변

1

t.user_id 대신 t.integer 또는 t.index을 사용해보십시오. 최소한 마이그레이션을 실행해야합니다.

0

t.references entry_for을 사용하고 Entry 모델에 내 고유의 외래 키 이름을 쓰는 방법으로 belongs_to :entry_for, class_name: "User"을 작성합니다. project 열의 경우 entries을 입력하면 마찬가지로 t.references project을 작성할 수 있음을 알게되었습니다.