2009-03-13 28 views
8

Tôi muốn tìm ra assocations của một lớp ActiveRecord khi chạy ...Tìm các liên kết cho lớp ActiveRecord tại thời gian chạy?

Giả sử tôi có như sau:

class Person < ActiveRecord::Base 
    has_many :chairs 
    has_many :pens 
end 

class Chair < ActiveRecord::Base 
    belongs_to :person 
end 

class Pen < ActiveRecord::Base 
    belongs_to :person 
end 

Làm thế nào tôi có thể tìm hiểu trong thời gian chạy mà Person "có nhiều" Ghế và Bút, và ngược lại? Tôi đang tìm một phương thức sẽ trả về một mảng các chuỗi (nếu tồn tại một phương thức như vậy). ví dụ:

Person.has_many_assocations 

sẽ trở lại:

["chairs", "pens"] 

Pen.belongs_to_associations 

sẽ trở lại:

["person"] 

Tôi có thiếu một phương pháp như thế này tồn tại ??

Cảm ơn sự giúp đỡ của bạn.

Trả lời

25

Tôi nghĩ lớp học ActiveRecord::Reflection có thể là những gì bạn đang tìm kiếm. Từ tài liệu:

Account.reflect_on_all_associations    # returns an array of all associations 
    Account.reflect_on_all_associations(:has_many) # returns an array of all has_many associations 
0

Nghe có vẻ hơi ngớ ngẩn để thực hiện thời gian chạy. Chính xác là bạn đang cố đạt được điều gì? Tôi cho rằng có một giải pháp đơn giản và thường được sử dụng hơn cho bất kỳ vấn đề nào của bạn.

Nếu tôi phải làm như vậy, tôi sẽ sử dụng TheModel.read_inheritable_attribute(:reflections).

+1

Uhhh ... hãy nghĩ đến nhiệm vụ Rake. Một trong đó cần phải biết các hiệp hội. –

+0

Các mô hình tự biết về các hiệp hội. Vì vậy, tôi vẫn không theo bạn;) –

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