我必須在新的用戶註冊時填充我的數據庫中的字段。但是此字段不是由用戶填寫,而是由應用程序填充在分貝。這是我試過的:有沒有更好的方式來覆蓋設計控制器在軌道上
- 在遷移文件中增加了額外的域(investorId)。
重寫的色器件控制器:
DEF創建
超級
如果@ user.save
@ user.investorId = @ user.id + X --->一些數
@ user.save
結束
末
雖然它工作正常,但我想知道是否有BETT因爲我是第一次做這件事的方法。
感謝, 薩欽
我必須在新的用戶註冊時填充我的數據庫中的字段。但是此字段不是由用戶填寫,而是由應用程序填充在分貝。這是我試過的:有沒有更好的方式來覆蓋設計控制器在軌道上
重寫的色器件控制器:
DEF創建
超級
如果@ user.save
@ user.investorId = @ user.id + X --->一些數
@ user.save
結束
末
雖然它工作正常,但我想知道是否有BETT因爲我是第一次做這件事的方法。
感謝, 薩欽
如果你需要創建一個記錄之前生成一個值,你可以使用模型上的before_create
或after_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
但他如何將@ user.id放在before_create方法中?最好在after_create回調中寫入 – LHH
一種方法是在回調中使用after_create和update_attribute。 – SacWebDeveloper
在回調之後將其更改爲 – SacWebDeveloper
不要重寫您的設計控制器,沒有這樣做的好處。簡而言之下面的邏輯在你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
謝謝LHH,你的解決方案就像一個魅力。覆蓋設備控制器的任何特定缺陷? – sacmax
是投資者ID到另一個表的外鍵關係,或只是一些自定義生成的標識? – SacWebDeveloper
investorId是一些自定義生成的標識符... – sacmax