是否有更好的方法来覆盖导轨中的设计控制器

时间:2016-03-08 14:53:01

标签: ruby-on-rails-4 devise

当新用户注册时,我必须在我的数据库中填充一个字段。但是该字段不是由用户填充,而是由数据库中的应用程序填充。这是我试过的:

  1. 在迁移文件中添加了额外字段(investorId)。
  2. 重写设计控制器:

    def创建
    超级
    if @ user.save
    @ user.investorId = @ user.id + X --->一些数字 @ user.save
    结束

  3. 虽然它工作正常,但我想知道是否有更好的方法,因为我是第一次这样做。

    谢谢, 萨钦

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

不要覆盖您的设备控制器,这样做没有任何好处。只需将以下逻辑放在User < ActiveRecord::Base after_create :create_investor_id private def create_investor_id self.update_column(:investor_id, id+some_number) end end 回调 -

foo