2012-05-19 21 views
25

İki has_one ilişkisini kullanan bir Rails modelim var: requester ve friend. konsolda ben kullandığınızda:Rails has_one sınıf adı ve yabancı anahtar ile

f = FriendRequest.all 
f[0].requester 

Ben ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: users.requester_id: SELECT "users".* FROM "users" WHERE "users"."requester_id" = 4 LIMIT 1 olsun.

Sınıf ismiyle bir `has_one 'ilişkisinin nasıl belirtileceğini gerçekten bilmiyorum ve kaydı belirten bir anahtar. Bu benim modelim:

Nasıl yapabilirim? belongs_to ilişkisinde, 'u belongs_to ile değiştirerek aynı şeyi kullanıyorum. Teşekkürler!

cevap

27
has_one :requester, :class_name => "User", :foreign_key => "requester_id" 

(Yayınladığınız kodundan) Bu hat requester bir User ve masa usersfriend_requests kayıtları doğru yabancı anahtar bir sütun requester_id içermesi gerektiğini gösterir. Raylar hata mesajı, requester_id sütununun mevcut olmadığını belirtir (bunu bir migration aracılığıyla oluşturmanız gerekir).

class AddRequesterIdToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :requester_id, :integer 
    end 
end 

Ve rake db:migrate ile onlara göç çalıştırın: Bu durumda

, O göç üretecektir

rails generate migration AddRequesterIdToUsers requester_id:integer 

kullanın.

has_one ve belongs_to arasındaki farklar ve bunların nasıl kullanıldığı hakkında daha fazla bilgi için Rails Relation Guide'a bakın.

İlgili konular