使用默认值填充具有外键的表

时间:2015-06-10 16:39:58

标签: ruby-on-rails

我希望你可以帮助我。 我有两张桌子,我希望它们有关系:

create_table "personals", force: :cascade do |t|
t.string   "trigramme"
t.string   "nom"
t.string   "prenom"
t.string   "poste"
t.text     "bio"
t.integer  "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

create_table "users", force: :cascade do |t|
t.string   "email",                  default: "", null: false
t.string   "encrypted_password",     default: "", null: false
t.string   "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer  "sign_in_count",          default: 0,  null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string   "current_sign_in_ip"
t.string   "last_sign_in_ip"
t.datetime "created_at",                          null: false
t.datetime "updated_at",                          null: false
end

我执行了这个:

rails generate model Personal trigramme:string nom:string ... user:references为了创建外键,我将belong_to(在Personal中)和has_one(在用户中)放在模型文件中。

当用户创建帐户时,您知道如何在表Personal中生成默认值吗?我的意思是在Personal表格中创建一个新行,在创建帐户时喜欢User中创建的行?

当用户创建帐户时,我的表User正确填充。

1 个答案:

答案 0 :(得分:0)

创建has_one关系的最佳做法是使用ActiveRecord回调before_create。 ActiveRecord在保存父记录(创建时)后自动填充子记录中的外键。然后,ActiveRecord将子记录保存为创建父记录的一部分。

class User < ActiveRecord::Base
  has_one :personal
  before_create :generate_profile

  protected

  def generate_profile
    self.build_personal
  end

end