ruby-on-rails – 从外键获取rails关联?

ruby-on-rails – 从外键获取rails关联?,第1张

概述我想要的是:对于给定的外键名称和模型类,我可以得到关联(知道可以解析哪个模型). 例如: # model: product.rbclass Product < ActiveRecord::Base belongs_to :categoryend# resolution:association = Product.get_association('category_id') 所以我需要 我想要的是:对于给定的外键名称和模型类,我可以得到关联(知道可以解析哪个模型).

例如:

# 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_association

Product.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关联?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1277088.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存