मेरे पास निम्नलिखित तीन मॉडल हैं: उपयोगकर्ता, प्रोजेक्ट, और असाइनमेंट।has_many में विदेशी कुंजी निर्दिष्ट करना: रिश्ते के माध्यम से
एक उपयोगकर्ता has_many
एक असाइनमेंट के माध्यम से परियोजनाएं। हालांकि, असाइनमेंट में वास्तव में दो उपयोगकर्ता से संबंधित विदेशी कुंजी: user_id
(उस उपयोगकर्ता का प्रतिनिधित्व करने वाले उपयोगकर्ता का प्रतिनिधित्व करता है) और completer_id
(प्रोजेक्ट पूरा करने वाले उपयोगकर्ता का प्रतिनिधित्व करता है)।
अक्सर, user_id
और completer_id
वही होगा (यदि उपयोगकर्ता को परियोजना को सौंपा गया था)। हालांकि, यदि कोई अन्य उपयोगकर्ता इसे पूरा करता है, तो user_id और fullter_id अलग होगा।
मेरे उपयोगकर्ता मॉडल में, मैं निम्नलिखित है:
class User < ActiveRecord::Base
has_many :assignments
has_many :incomplete_assignments, :class_name => 'Assignment',
:conditions => 'completer_id IS NULL'
has_many :completed_assignments, :class_name => 'Assignment',
:foreign_key => 'completer_id'
# this is the important one
has_many :incomplete_projects,
:through => :assignments,
:source => :project,
:conditions => 'completer_id IS NULL'
end
मैं एक संघ बनाने के लिए चाहते हैं, :completed_projects
, जो :through
मॉडल में उपयोगकर्ता के लिए विदेशी कुंजी के रूप में completer_id
का उपयोग करता है, बजाय :user_id
बुलाया । क्या इसे करना संभव है?
और, एक तरफ के रूप में, मुझे :foreign_key
विकल्प से अवगत है। हालांकि, :through
का उपयोग करते समय, इस विकल्प को अनदेखा किया जाता है, इसलिए मैं जानना चाहता हूं कि इसके बिना ऐसा करने का कोई तरीका है या नहीं।
अंत में, मुझे यह उल्लेख करना चाहिए कि मैं अन्य डिज़ाइनों के लिए खुला हूं, अगर ऐसा नहीं किया जा सकता है और कोई बेहतर तरीके से सोच सकता है।
आपका स्वागत है। :) – hobodave