gpt4 book ai didi

ruby-on-rails - 在Rails中按多态类型查找所有内容?

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

有没有办法在Rails中找到特定多态类型的所有多态模型?因此,如果我有Group,Event和Project,并且都带有如下声明:
has_many :assignments, :as => :assignable
我可以做类似的事情吗?
Assignable.all
...或者
BuiltInRailsPolymorphicHelper.all("assignable")
那样就好了。

编辑:

...使得Assignable.all返回[Event, Group, Product](类的数组)

最佳答案

没有直接的方法可以做到这一点。我为ActiveRecord::Base编写了这个猴子补丁。
这将适用于任何类(class)。

class ActiveRecord::Base

def self.all_polymorphic_types(name)
@poly_hash ||= {}.tap do |hash|
Dir.glob(File.join(Rails.root, "app", "models", "**", "*.rb")).each do |file|
klass = File.basename(file, ".rb").camelize.constantize rescue nil
next unless klass.ancestors.include?(ActiveRecord::Base)

klass.
reflect_on_all_associations(:has_many).
select{ |r| r.options[:as] }.
each do |reflection|
(hash[reflection.options[:as]] ||= []) << klass
end
end
end
@poly_hash[name.to_sym]
end

end

现在,您可以执行以下操作:
Assignable.all_polymorphic_types(:assignable).map(&:to_s)
# returns ['Project', 'Event', 'Group']

关于ruby-on-rails - 在Rails中按多态类型查找所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2315239/

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