我希望你可以帮助我。 我有两张桌子,我希望它们有关系:
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
正确填充。
答案 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