2012-05-19 17 views
25

मेरे पास एक रेल मॉडल है जो मैं दो has_one संबंधों का उपयोग करता हूं: requester और friend। कंसोल में मैं का उपयोग करते हैं:रेल के नाम और विदेशी कुंजी के साथ रेल हैं

f = FriendRequest.all 
f[0].requester 

मैं ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: users.requester_id: SELECT "users".* FROM "users" WHERE "users"."requester_id" = 4 LIMIT 1 मिलता है।

मुझे वास्तव में पता नहीं है कि कक्षा के नाम के साथ 'हैसोन' संबंध और एक कुंजी जो रिकॉर्ड निर्दिष्ट करती है। यह मेरा मॉडल है:

class FriendRequest < ActiveRecord::Base 
    has_one :requester, :class_name => "User", :foreign_key => "requester_id" 
    has_one :friend, :class_name => "User", :foreign_key => "friend_id" 
end 

मैं यह कैसे कर सकता हूं? belongs_to रिलेशनशिप में मैं belongs_to के साथ स्पष्ट रूप से has_one को प्रतिस्थापित करता हूं। धन्यवाद!

उत्तर

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

(कोड है कि आप पोस्ट से) यह लाइन दर्शाती है कि requester एक User है, और तालिका users एक स्तंभ requester_id कि friend_requests रिकॉर्ड की ओर विदेशी कुंजी है शामिल करना चाहिए। रेल त्रुटि संदेश बताता है कि कॉलम requester_id मौजूद नहीं है (आपको इसे migration के माध्यम से बनाना होगा)।

इस मामले में, का उपयोग

rails generate migration AddRequesterIdToUsers requester_id:integer 

यह प्रवास उत्पन्न करेगा:

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

और उनमें rake db:migrate साथ माइग्रेशन चला। has_one और belongs_to, और उन्हें कैसे उपयोग करने के लिए बीच अंतर की अधिक जानकारी के लिए Rails Relation Guide पर

देखो।

संबंधित मुद्दे