2016-04-10 14 views
0

İki tablom var (yani kullanıcılar ve profiller). Tabloların şeması yer almaktadır:Ruby on ray: Bire bir veritabanı ekleme ile sorun

create_table "users", force: :cascade do |t| 
    t.string "username" 
    t.string "password_digest" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
end 

create_table "profiles", force: :cascade do |t| 
    t.string "gender" 
    t.integer "birth_year" 
    t.string "first_name" 
    t.string "last_name" 
    t.integer "user_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
end 

modelidir: Aşağıdaki adımlarda kayıtları eklemek çalışıyorum

class Profile < ActiveRecord::Base 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :todo_lists 
    has_many :many_items, through: :todo_lists, source: :todo_items 
end 

:

user = User.create! username: "Fiorina",password_digest: "abc" 
user_profile = Profile.create! gender:"F",birth_year:"1954",first_name:"Carly",last_name:"Fiorina" 
user_profile.profile = user 

Ancak olsun hatası:

"NoMethodError: undefined method" profile = "for"

Hata iletisi açık değil.Ancak, nasıl çözeceğimi bilmiyorum, yani profile yöntemini oluşturma. Ayrıca, aşağıdaki blogu okuyorum ve bire bir ilişki 4 yöntem oluşturacağını söylüyor. 4 yöntem oluşturulduğundan emin olmak için zaten var mı. veritabanı alanında ve dernek adına göre

user_profile.user = user 

:

http://requiremind.com/differences-between-has-one-and-belongs-to-in-ruby-on-rails/

cevap

1

Sen useruser_profile ait

user_profile.user=user

ayarlamanız gerekir ama aynı sonucu

user.create_profile(gender:"F",birth_year:"1954",first_name:"Carly",last_name:"Fiorina")

Bu, otomatik olarak bu kullanıcı için profil oluşturur yapmak için daha kısa bir yol var. ister bu noktada

class User < ActiveRecord::Base 
    has_one :profile 
    has_many :todo_lists 
    has_many :many_items, through: :todo_lists, source: :todo_items 
end 
de kaydetmek yoksa

Ayrıca build_profile kullanabilirsiniz

1

Bunu değiştirmek gerekir.