gpt4 book ai didi

ruby-on-rails - proxy_association 查找未关联记录的解释

转载 作者:行者123 更新时间:2023-12-04 22:49:36 24 4
gpt4 key购买 nike

我今天遇到了一些魔法,我希望能帮助我理解它,这样我就可以编写明智的代码。

在我的应用程序中,我有三个类:

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并取回所有 AppProfiles当前未与 Person 关联的无需做大量的 SQL 工作。杰出的!

我的问题是我不理解代码——这总是让我感到不安。我尝试浏览 proxy_association 文档,但它相当不透明。

任何人都可以提供合理直接的解释和/或了解更多信息的好地方吗?

最佳答案

基本上,当您调用 self同时延长 association它不会返回 Association实例,而是委托(delegate)给 to_a .

尝试一下:

class Person < ActiveRecord::Base
has_many :app_profiles, through: :selected_apps do
def test_me
self
end
end
end

有时我们需要得到实际的 association对象同时扩展关联本身。输入 proxy_association method ,这将为我们提供 association其中包含 owner , target , and reflection attributes .

这里的引用是 documentation .

This question提供了一个更简单的 proxy_association.owner 用例.

关于ruby-on-rails - proxy_association 查找未关联记录的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10405261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com