2013-11-24 91 views
0

是否有可能返回給定屬性的父對象?如何從屬性獲取父對象類名

a = User.birthdate 
    a.parent_object ... should return the user record that is the parent of the birthdate attribute 

一個更好的例子?

助手

def item_grade(subject, obj) 
    obj.scale.grades.find(subject.grade_id).name # would return something like "Pass", "Fail", "Good Job" 
end 

在視圖

item_grade(@course.subject, @course) 

這種方法需要傳遞給助手兩個選項。看來我應該能夠從

助手

def item_grade(subject) 
    a = subject.parent_object.scale 
    a.grades.find(subject.grade_id).name 
end 

查看

item_grade(@course.subject) 
+1

不,不可能。屬性值是純原語(字符串,日期,數字等)。他們沒有「父母」的概念。 –

+1

我想你可以重寫所有的訪問器方法來返回通過'method_missing' hackery將大多數方法調用轉發給'value'的小'值,父'對象。 –

回答

2

這種方法需要兩個選項傳遞通過@ course.subject然後獲取父對象給幫手。

例如,通過這樣做可以刪除一些重複項。

def item_grade(obj, property) 
    obj.scale.grades.find(obj.send(property).grade_id).name 
end 

item_grade(@course, :subject) 

現在你不必在呼叫中重複@course

必須通過兩個參數比任何你可以想到的hackery(謝謝@ muistooshort)都要少得多。沒有內置的方法來做到這一點。