Ruby on rails 处理ActiveRecord::Reflections——一些模型反射为空(Rails 4.2)
Rails和ActiveRecord 4.2.1、Ruby 2.2.0 编辑:请注意,这个问题主要是为了讨论ActiveRecord的反射方面是如何工作的,以便更好地理解AR和Rails 我正在研究一个关注点,它研究ActiveRecord模型的关联,并基于这些关联创建回调。对单个文件或示例的测试通过。但是,当测试完整套件或运行dev服务器时,它会失败,因为某些模型返回nil进行反射。要点:Ruby on rails 处理ActiveRecord::Reflections——一些模型反射为空(Rails 4.2),ruby-on-rails,activerecord,Ruby On Rails,Activerecord,Rails和ActiveRecord 4.2.1、Ruby 2.2.0 编辑:请注意,这个问题主要是为了讨论ActiveRecord的反射方面是如何工作的,以便更好地理解AR和Rails 我正在研究一个关注点,它研究ActiveRecord模型的关联,并基于这些关联创建回调。对单个文件或示例的测试通过。但是,当测试完整套件或运行dev服务器时,它会失败,因为某些模型返回nil进行反射。要点: module CustomActivityMaker extend ActiveSupport::C
module CustomActivityMaker
extend ActiveSupport::Concern
module ClassMethods
# @param {Array[Symbols]} assns
# 'assns' params is a list of a model's associations
def create_activity_for(assns)
assns.each do |assn|
r = self.reflect_on_association(assn)
if r.is_a?(ActiveRecord::Reflection::ThroughReflection)
# For a through association, we just track the creation of the join table.
# byebug
r.source_reflection.klass # <== source_reflection unexpectedly ends up being nil
else
r.klass
end
...
end
end
end
end
模块CustomActivityMaker
扩展ActiveSupport::关注点
模块类方法
#@param{Array[Symbols]}assns
#“assns”参数是模型关联的列表
def创建活动(assns)
每个人都有助理|
r=自我反思协会(assn)
如果r.is_a?(ActiveRecord::Reflection::ThroughReflection)
#对于直通关联,我们只跟踪连接表的创建。
#比伯
r、 source_reflection.klass#我找不到任何资源来指导我了解Rails的内部工作,所以我去看了一个流行的gem,它同样需要通过ActiveRecord::Reflections进行解析,因为它也可能需要处理Rails没有按照自己的意愿加载东西的问题。在这里,我:
再加上我的担心,我的问题就解决了。来自ActiveSupport::Autoload:“此模块允许您根据Rails约定定义自动加载(即,无需定义根据文件名自动猜测的路径),还可以定义一组需要立即加载的常量。”我找不到任何资源来指导我完成Rails的内部工作,因此,我转而研究了一个流行的gem,它同样需要通过ActiveRecord::Reflections进行解析,因为它也可能需要处理Rails无法按其希望加载的问题。在这里,我:
再加上我的担心,我的问题就解决了。来自ActiveSupport::Autoload:“此模块允许您根据Rails约定定义自动加载(即无需定义根据文件名自动猜测的路径),还可以定义一组需要立即加载的常量。”对不起,什么是klass
?没关系,我查过了。。。我就是不能删除对mobilesorry的评论,什么是klass
?没关系,我查过了。。。我就是不能删除手机上的评论
# models/contact.rb
class Contact < ActiveRecord::Base
has_many :emails
has_many :addresses
has_many :phone_numbers
has_many :checklists
has_many :checklist_items, through: :checklists
create_activity_for :checklist_items
...
end
# models/checklist.rb
class Checklist < ActiveRecord::Base
belongs_to :contact
has_many :checklist_items
...
end
# models/checklist_item.rb
class ChecklistItem < ActiveRecord::Base
belongs_to :checklist
has_one :matter, through: :checklist
...
end
Checklist.reflections # <== {}
included do
...
extend ActiveSupport::Autoload
autoload :Association
autoload :Reflection
autoload :SingularReflection
autoload :CollectionReflection
autoload :BelongsToReflection
autoload :HasOneReflection
autoload :HasManyReflection
end