2013-11-24 48 views
-1

有一天,我試圖在rails控制檯中修復一些數據。如何防止在rails中設置現有記錄ID時覆蓋對象

Class Project 
     belongs_to :user 
    end 

    Class User 
     has_many :projects   
    end 

代碼很簡單,我是爲了一個項目涉及到一個用戶這在軌控制檯:

user = User.find 31 
    project = Project.find 99 
    project.user_id = user.id 
    project.save 

但是,我犯了一個錯誤:

user = User.find 31 
    project = Project.find 99 
    project.id = user.id #!!!!!! I used #id instead of #user_id 
    project.save 

由於項目具有id = 31的記錄,所以此操作相當於更新項目,其中id == 31.

有沒有辦法爲了防止這種錯誤的錯誤?

+0

作爲一種最佳實踐,我會建議不要通過控制檯修改生產數據。即使它看起來很小(像這樣),也沒有一種很好的方式來審計發生的事情,回滾更改或防止錯誤。相反,您可以編寫rake任務,讓其他人查看,爲他們編寫測試,在本地測試樣本數據,然後在服務器上運行它們,這樣可以減少破壞生產數據的可能性。 – carols10cents

+0

@ carols10cents感謝您的建議,非常好的觀點:) – KilenZhang

回答

0

那麼如果你需要/想在鐵軌控制檯進行實驗而這不會對您的數據的任何永久性的影響,你可以調用它與

rails console --sandbox 

當您退出控制檯中的所有更改將被回滾。