आपका कोड काम ठीक दिया जाना चाहिए कि आप Task
पर एक user_id
विशेषता विदेशी कुंजी के रूप में कार्य करने के लिए, या इस प्रकार आप User
मॉडल पर संघ में विदेशी कुंजी निर्दिष्ट कर सकते हैं कि:
class User < ActiveRecord::Base
has_many :tasks, foreign_key: "uid"
end
अब समस्या यह है कि आप पर ActiveResource
पर उपयोग नहीं कर सकते हैं, जब तक आपको Task
कक्षा के उदाहरण से user
पुनर्प्राप्त करने की आवश्यकता नहीं है, तो आप इसे हटा सकते हैं और संबंध के दूसरी तरफ अभी भी काम करेंगे, हालांकि, यदि आपको आवश्यकता है user
पुनर्प्राप्त करें, तो आपको या तो अपना खुद का कार्यान्वयन करना होगा खोजक विधि इस प्रकार है:
class Task < ActiveResource::Base
schema do
string 'created_by' #email
# other fields
end
def user
@user ||= User.find self.user_id # use the attribute name that represents the foreign key
end
def user=(user)
@user = user
self.update_attribute(:user_id, user.id)
end
end
यह मूलतः एक ही व्यवहार करेंगे जैसा कि आप एक ActiveRecord
मॉडल पर उम्मीद करेंगे, यदि आप कई संघों है लेकिन इस थकाऊ हो सकता है तो आप के बजाय इस प्रकार belongs_to
जोड़ने के लिए ActiveResource
मॉड्यूल विस्तार कर सकते हैं :
module BelongsToActiveResource
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def belongs_to(name, options = {})
class_eval %(
def #{name}
@#{name} ||= name.to_s.classify.find(name.id)
end
def #{name}=(obj)
@#{name} ||= obj
self.update_attribute((name.to_s + "_id").to_sym, @#{name}.id
end
)
end
end
end
ActiveResource::Base.class_eval { include BelongsToActiveResource }
यह आपको किसी भी ActiveResource
मॉडल पर belong_to का उपयोग करने की अनुमति देगा।
पुनश्च: टास्क के लिए: ऊपर समाधान द्वारा https://stackoverflow.com/a/8844932/3770684
मैं बंदर पैच आप सुझाव के साथ इस की कोशिश की लेकिन जब मैं रन 'User.last.tasks' मैं 'अपरिभाषित विधि 'relation_delegate_class NoMethodError': मिल प्रेरित था क्लास ' – Simmo
रूबी और रेल के कौन से संस्करण आप उपयोग कर रहे हैं? – cousine
रेल 4.1.0 और रूबी 2.1.1 – Simmo