2009-07-22 16 views
155

मेरे उपयोगकर्ता मॉडल में मैं हो सकता है:रेल has_many

has_many :tasks 

और मेरे टास्क मॉडल में:

belongs_to :user 

फिर, विदेशी कुंजी 'user_id' मान कार्यों में जमा हो गया था मेज, मैं इस्तेमाल कर सकते हैं:

@user.tasks 

मेरा प्रश्न है, मैं has_many संबंध ऐसा है कि मैं के रूप में एक उपयोगकर्ता की कार्य का उल्लेख कर सकते यह घोषित करते हैं:

@user.jobs 

... या ...

@user.foobars 

धन्यवाद एक ढेर।

+7

मैं टास्क एक वर्ग नाम के रूप में उपयोग करने का थके हुए हो जाएगा - यह एक रेल आरक्षित शब्द है और सड़क के नीचे अजीब मुद्दों का कारण बन सकता है: http://reservedwords.herokuapp.com/ –

+0

मुझे वही समस्या @doctororange थी! –

उत्तर

303

इस एक शॉट दे दो:

has_many :jobs, foreign_key: "user_id", class_name: "Task" 

ध्यान दें, कि :aspolymorphic associations के लिए प्रयोग किया जाता है।

+0

विदेशी कुंजी सहित भी धन्यवाद - मेरी समान लेकिन अलग समस्या हल हो गई। –

+2

क्या इसे कार्य पक्ष पर विशेष कुछ चाहिए या सामान्य 'belong_to' पर्याप्त है? –

-49

आप इन दो अलग-अलग तरीकों से कर सकते हैं। एक "के रूप में"

has_many :tasks, :as => :jobs 

या

def jobs 
    self.tasks 
end 

जाहिर है पहले एक सबसे अच्छा तरीका है इसे संभाल करने के लिए किया जाएगा का उपयोग करके।

+0

धन्यवाद, यह सही लगता है। दुर्भाग्य से यह काम नहीं किया: उपयोगकर्ता मॉडल: has_many: कार्य, के रूप =>: created_tasks नियंत्रक: @created_tasks = @ user.created_tasks ----- TasksController # सूचकांक में NoMethodError # <उपयोगकर्ता: 0xb6050b5c> – doctororange

+35

के लिए अपरिभाषित विधि 'create_tasks': जैसा कि इस विशेष समस्या के लिए पॉलिमॉर्फिक संघों के लिए उपयोग नहीं किया जाता है ... –

+3

दूसरी विधि वास्तव में एसोसिएशन के उपनाम बनाने के लिए काफी उपयोगी है। – jpgeek

25

तुम भी alias_attribute इस्तेमाल कर सकते हैं अगर आप अभी भी कार्य के रूप में उन्हें का उल्लेख करने के साथ ही सक्षम होना चाहते हैं:

class User < ActiveRecord::Base 
    alias_attribute :jobs, :tasks 

    has_many :tasks 
end 
संबंधित मुद्दे