Lan*_*ard 10 ruby-on-rails helpers polymorphic-associations
有没有办法在Rails中找到特定多态类型的所有多态模型?所以如果我有Group,Event和Project都有一个声明,如:
has_many :assignments, :as => :assignable
我可以这样做:
Assignable.all
...要么
BuiltInRailsPolymorphicHelper.all("assignable")
那样就好了.
编辑:
...这样Assignable.all返回[Event, Group, Product](类数组)
Har*_*tty 16
没有直接的方法.我写了这个猴子补丁ActiveRecord::Base.这适用于任何课程.
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
Run Code Online (Sandbox Code Playgroud)
现在您可以执行以下操作:
Assignable.all_polymorphic_types(:assignable).map(&:to_s)
# returns ['Project', 'Event', 'Group']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5014 次 |
| 最近记录: |