我今天遇到了一些魔法,我希望能帮助我理解它,这样我就可以编写明智的代码。
在我的应用程序中,我有三个类:
class Person < ActiveRecord::Base
has_many :selected_apps
has_many :app_profiles, through: :selected_apps do
def unselected(reload=false)
@unselected_app_profiles = nil if reload
@unselected_app_profiles ||= proxy_association.owner.app_profile_ids.empty? ?
AppProfile.all :
AppProfile.where("id NOT IN (?)", proxy_association.owner.app_profile_ids)
end
end
end
class AppProfile < ActiveRecord::Base
end
class SelectedApp < ActiveRecord::Base
belongs_to :person
belongs_to :app_profile
end
上面的代码让我无需做大量的 SQL 工作就可以完成person.app_profiles.unselected
并取回所有AppProfiles
当前不相关的内容。Person
杰出的!
我的问题是我不理解代码——这总是让我感到不安。我尝试浏览 proxy_association 文档,但它相当不透明。
任何人都可以提供合理直接的解释和/或了解更多信息的好地方吗?