2010-06-15 13 views
6

में उचित विदेशी कुंजी का उत्पादन नहीं कर रहा है, मैं रेल 3 पर एक आवेदन अपडेट कर रहा हूं और मुझे एक कस्टम विदेशी कुंजी बनाने में परेशानी हो रही है। मैं कुछ इस तरह है:एक कस्टम क्लास_नाम के साथ संबंधित है जो रेल 3

class Product < ActiveRecord::Base 
    belongs_to :owner, :class_name => 'User' 
... 
end 

class User < ActiveRecord::Base 
    has_many :products 
... 
end 

class ProductsController < ApplicationController 
    before_filter :authenticate_user! 

    def index 
    @products = current_user.products 
    end 
end 

दृश्य:

Mysql::Error: Unknown column 'products.user_id' in 'where clause': SELECT  `products`.* FROM  `products` WHERE  (`products`.user_id = 1) 

यह belongs_to :owner देख सकते हैं और एक विदेशी कुंजी के लिए दिखना चाहिए:

<%- @products.each do |p| -%> 
    <%= p.created_at %><br /> 
<%- end -%> 

मैं अपने रेल में इस त्रुटि के लिए लॉग इन मिलता है owner_id कहा जाता है। मैंने स्पष्ट रूप से विदेशी कुंजी को सेट करने का भी प्रयास किया और यह काम नहीं करता है। मैंने एक संभावित रेल 3 बग के लिए लाइटहाउस की भी जांच की लेकिन कोई भाग्य नहीं।

उत्तर

15

आपको has_many :products एसोसिएशन पर विदेशी कुंजी निर्दिष्ट करने की आवश्यकता है, यह स्वचालित रूप से यह नहीं जानता कि यह belongs_to :owner दर्पण करता है।

यह काम करना चाहिए:

class User < ActiveRecord::Base 
    has_many :products, :foreign_key => 'owner_id' 
... 
end

रेल डॉक्स से:

: foreign_key

निर्दिष्ट विदेशी कुंजी संघ के लिए इस्तेमाल किया। डिफ़ॉल्ट रूप से यह निचले मामले में कक्षा का नाम और "_id" प्रत्यय का अनुमान लगाया गया है। .. foreign_key

+0

इस काम किया, लेकिन मैं यह थोड़ा अजीब है कि मैं अपने रेल के साथ यह करने के लिए नहीं था है लगता है: तो एक व्यक्ति वर्ग करता है कि एक has_many संघ का उपयोग करेगा "person_id" के रूप में डिफ़ॉल्ट 2 ऐप सुनिश्चित नहीं है कि इसे एक बग माना जाएगा – Tony

+0

यह रेल 2 में समान होना चाहिए। :) – elektronaut

+0

मेरे पास मेरी तालिका पर दो कॉलम हैं जो उपयोगकर्ता तालिका का संदर्भ देते हैं। क्या आप जानते हैं कि मैं संदर्भ कैसे स्थापित करूं? मैं ऊपर बताए गए मालिक_आईडी नहीं कह सकता क्योंकि मुझे मालिक और सबमिटिंग यूज़र की आवश्यकता है। धन्यवाद! – skaz

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