ruby-on-rails – 用于查找无关联记录的proxy_association的说明
发布时间:2020-12-17 03:53:52 所属栏目:百科 来源:网络整理
导读:我今天遇到了一些魔法,我希望能帮助你理解它,这样我才能编写有用的代码. 在我的应用程序中,我有三个类: class Person ActiveRecord::Base has_many :selected_apps has_many :app_profiles,through: :selected_apps do def unselected(reload=false) @unsel
我今天遇到了一些魔法,我希望能帮助你理解它,这样我才能编写有用的代码.
在我的应用程序中,我有三个类: 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 上面的代码让我做person.app_profiles.unselected并获取当前没有与Person关联的所有AppProfiles,而无需进行大量的SQL工作.辉煌! 我的问题是我不理解代码 – 这总是让我感到不安.我试图通过proxy_association文档,但它是相当不透明的. 任何人都可以提供一个相当直接的解释和/或一个学习更多的好地方吗? 解决方法
基本上,当您在扩展关联时调用self时,它不会返回Association实例,而是委托to_a.
试试吧: class Person < ActiveRecord::Base has_many :app_profiles,through: :selected_apps do def test_me self end end end 有时我们需要在扩展关联本身的同时获取实际的关联对象.输入 这里参考的是documentation. This question提供了一个更简单的proxy_association.owner用例. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |