2016-03-08 72 views
0

我必須在新的用戶註冊時填充我的數據庫中的字段。但是此字段不是由用戶填寫,而是由應用程序填充在分貝。這是我試過的:有沒有更好的方式來覆蓋設計控制器在軌道上

  1. 在遷移文件中增加了額外的域(investorId)。
  2. 重寫的色器件控制器:

    DEF創建
    超級
    如果@ user.save
    @ user.investorId = @ user.id + X --->一些數
    @ user.save
    結束

雖然它工作正常,但我想知道是否有BETT因爲我是第一次做這件事的方法。

感謝, 薩欽

+0

是投資者ID到另一個表的外鍵關係,或只是一些自定義生成的標識? – SacWebDeveloper

+0

investorId是一些自定義生成的標識符... – sacmax

回答

1

如果你需要創建一個記錄之前生成一個值,你可以使用模型上的before_createafter_create回調。

User < ActiveRecord::Base 
    after_create :generate_investor_id 

    private 

    def generate_investor_id 
    reload 
    investor_id = "#{self.id}something" 
    update_attribute(:investor_id, investor_id) 
    end 
end 
+0

但他如何將@ user.id放在before_create方法中?最好在after_create回調中寫入 – LHH

+0

一種方法是在回調中使用after_create和update_attribute。 – SacWebDeveloper

+1

在回調之後將其更改爲 – SacWebDeveloper

1

不要重寫您的設計控制器,沒有這樣做的好處。簡而言之下面的邏輯在你after_create回調 -

User < ActiveRecord::Base 
    after_create :create_investor_id 

    private 

    def create_investor_id 
     self.update_column(:investor_id, id+some_number) 
    end 
end 
+0

謝謝LHH,你的解決方案就像一個魅力。覆蓋設備控制器的任何特定缺陷? – sacmax

相關問題