ruby-on-rails – 从外键获取rails关联?
我想要的是:对于给定的外键名称和模型类,我可以得到关联(知道可以解析哪个模型).
例如: # model: product.rb class Product < ActiveRecord::Base belongs_to :category end # resolution: association = Product.get_association('category_id') 所以我需要这个get_association函数. 我现在知道的: >从Product.reflections我可以得到一个反射/关联列表 但是,我想问一下我是否可以直接调用一个简单的方法? 更新:我真正需要的是什么 我正在使用audit实现审计日志视图.但是,当我尝试输出审计日志时,我能得到的是这样的: supplier_id: changed from '1' to '0' 我想用供应商的实际名称替换数字,因此我相信如果给出supplier_id,我应该能够获得供应商模型. 另外,因为我用过: belongs_to :reporter,class_name: 'User' 因此,我不能简单地从给定的密钥中猜出类名. 解决方法
您正在寻找
reflect_on_association
Product.reflect_on_association(:类) 编辑:不要在这里使用reflect *. tl; dr:记录类名并使用.find 如果你的模特看起来像 class Employee belongs_to :manager,foreign_key: :manager_id end class Manager has_many :subordinates,foreign_key: :manager_id,class_name: 'Employee' end 并且logfile表示如下:manager_id:从’1’更改为’2′,已更改的模型将是Employee,因为它具有列manager_id.但是没有办法从你的问题中的示例日志中找出答案,因为由于多个模型可以拥有列manager_id,所以无法获得明确的答案.但在这个简单的例子中,我们知道关联的模型是Manager,日志中的数字可以用名称替换:Manager.find(1),Manager.find(2).这里不需要反思魔法. 想想这个案子: class Employee belongs_to :manager,foreign_key: :department_id,class_name: 'Manager' end class Responsibility belongs_to :manager,foreign_key: :organizer_id,class_name: 'Manager' belongs_to :department,class_name: 'Department' end class Manager has_many :subordinates,class_name: 'Employee' has_many :obligations,class_name: 'Responsibility' end class Department has_many :obligations,class_name: 'Responsibility' end 如果您的日志只包含department_id:从“1”更改为“2”,您无法知道公司中的确切更改内容. 要解决此问题,您必须记录关联模型的类名(而不是已更改的模型的类名).如果您有类名,那么这里不需要任何反射,它就像第一个简单的情况一样.find. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |