2012-10-04 32 views
1

在線上教程後,我有一個名爲Person的模型。過了一段時間,我們決定將其重命名爲用戶更明智。我通過代碼庫去了,做了以下內容:重命名模型並更改對模型的所有引用後,引用仍然保留原名稱

  1. 更名人的所有實例用戶,個人用戶,人們用戶和人民給用戶,注意不要揍什麼無關。
  2. 適當地重命名所有模型文件。

我有另一種模式稱爲會話:

會議belongs_to的用戶

用戶的has_many會話

此前運行的遷移的git grep的-i人/人,並找到| grep人/人只是返回遷移,所以我敢肯定,我已經正確地重新命名了一切。

當我去創建隨後創建了一個會議上,我碰到下面的錯誤新用戶:

未知屬性:user_id說明

運行git grep的,我再次發現,在會議外鍵仍然爲person_id

create_table "sessions", :force => true do |t|                                
    t.integer "person_id 
    t.string "ip_address"                     
    t.string "path" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
end  

我該如何解決這個問題?

+0

你怎麼在控制檯中看到,當你鍵入的用戶? – emrahbasman

+0

更改後重新創建數據庫....刪除數據庫並重新運行遷移 – Ross

+0

@Emrah:用戶(id:整數,用戶名:字符串,salt:字符串,encrypted_pa​​ssword:字符串,created_at:datetime,updated_at:datetime,電子郵件:字符串,profile_image_path:字符串,forename:字符串,姓氏:字符串,avatar_file_name:字符串,avatar_content_type:字符串,avatar_file_size:integer,avatar_updated_at:datetime,about:字符串) –

回答

7

只是做在遷移

def change 
    rename_column :sessions, :person_id, :user_id 
end 
1

在會話表,你必須改變爲person_id到user_id說明,

for that you have to add new migration for adding user_id and remove person_id 

def change 
    add_column :sessions, :user_id, :integer 
    remove_column :sessions, :person_id, :integer 
end 
+1

這不會破壞原來的belongs_to關聯嗎? –

+0

不,現在我們與用戶的關係 –

+1

接受Aayush的答案,因爲他的答案不涉及丟失數據。 –

1

如果更改一個關聯的名稱,而不是底層的列名,你必須讓它在協會明確:

class Session 
    belongs_to :user, :foreign_key => "person_id", :inverse_of => :sessions 
end 

class User 
    has_many :sessions, :foreing_key => "person_id", :inverse_of => :user 
end 
相關問題