例如:
# model: product.rbclass Product < ActiveRecord::Base belongs_to :categoryend# 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_associationProduct.reflect_on_association(:类)
编辑:不要在这里使用reflect *.
tl; dr:记录类名并使用.find
如果你的模特看起来像
class Employee belongs_to :manager,foreign_key: :manager_IDendclass 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'endclass Responsibility belongs_to :manager,foreign_key: :organizer_ID,class_name: 'Manager' belongs_to :department,class_name: 'Department'endclass Manager has_many :subordinates,class_name: 'Employee' has_many :obligations,class_name: 'Responsibility'endclass Department has_many :obligations,class_name: 'Responsibility'end
如果您的日志只包含department_ID:从“1”更改为“2”,您无法知道公司中的确切更改内容.
要解决此问题,您必须记录关联模型的类名(而不是已更改的模型的类名).如果您有类名,那么这里不需要任何反射,它就像第一个简单的情况一样.find.
总结以上是内存溢出为你收集整理的ruby-on-rails – 从外键获取rails关联?全部内容,希望文章能够帮你解决ruby-on-rails – 从外键获取rails关联?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)