我正在創建一個gem來導出一小部分相關的ActiveRecord對象。有沒有更好的方法來查找ActiveRecord對象的孩子和父母?
以下是我目前如何找到父母&孩子。
# belongs_to, based on column names with an _id suffix
def belongs_to_relations(ar_instance)
columns = ar_instance.class.column_names
parents = columns.map{ |c| c if c =~ /_id/ }.reject{ |c| c.nil? }
parents.map!{ |parents| parents.gsub('_id', '') }
end
# has_many, based on existence of a xxx_id column in other tables
def has_many_relations(ar_instance)
column_name = "#{ar_instance.class.name.underscore}_id"
descendents = ActiveRecord::Base.connection.tables
descendents.reject!{ |table| false unless table.classify.constantize rescue true }
descendents.reject!{ |table| true unless table.classify.constantize.column_names.include?(column_name) }
end
有沒有更好的方法來找到這些關係?這工作好,但遙遠的關係,如:通過,我必須手動指定。