2010-05-21 30 views

Trả lời

28

Bạn nên sử dụng ActiveRecord reflections.

Sau đó, bạn có thể gõ một cái gì đó như thế này:

A.reflect_on_all_associations.map { |assoc| assoc.name} 

đó sẽ trở lại mảng của bạn

[:B, :C] 
+17

Để có được chỉ 'hiệp hội has_many', nó có thể truyền một tham số: 'A.reflect_on_all_associations (: has_many) .map (&: name) # => [: B,: C]' – Voyta

+0

là có cách phản ánh (tức là di chuyển) trên biến * instance * , nơi mà các hiệp hội đã được háo hức nạp? –

+0

Mark Richman: self.class.reflect_on_all_associations ... – stebooks

2

Ví dụ bạn có thể thử:

aux=Array.new 
Page.reflections.each { |key, value| aux << key if value.instance_of?(ActiveRecord::Reflection::AssociationReflection) } 

Hi Pioz, Have a nice day!

0

Tìm thấy các giải pháp:

def self.get_macros(macro) 
    res = Array.new 
    self.reflections.each do |k,v| 
    res << k if v.macro == macro.to_sym 
    end 
    return res 
end 
+0

@ câu trả lời nathanvda là đơn giản hơn nhiều ... – tokland

Các vấn đề liên quan