Rails在创建时向表添加数据

时间:2017-06-01 07:44:54

标签: ruby-on-rails ruby ruby-on-rails-5

我有两个表User(Devise)和Phones

我希望当用户注册时使用devise完成注册,user_id和手机类型被加载到Phones表中

但我不知道该怎么做。我已将用户与电话链接

  

User.rb

has_many :phones
  

Phones.rb

belongs_to :user
  

db(架构)

 t.index ["user_id"], name: "index_phones_on_user_id"

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:4)

您可以在User型号

上运行after_create回调
after_create :assign_phone

private

def assign_phone
  phone = phones.new
  # assign required values
  phone.save
end

正如评论中所述,如果出现错误,phone.save将默默返回false,使用!(bang)将引发错误,另一个解决方案是检查是否已保存或不然后执行你想要的任务..

def assign_phone
  phone = phones.new
  # assign required values
  if phone.save
    #on successfull save
  else
    #on failure
  end
end

答案 1 :(得分:0)

在user.rb

after_create :assign_phone

def assign_phone
  phone = self.phones.build
  phone.save
end

这样您将无法添加手机类型。但是,如果你想保存类型,那么你必须覆盖devise / registrations_controller.rb的“create”方法