我有一个模型,可以手动检查每个(:has_many
,:has_one
)依赖关系,但是我想要记录像current_user.attributes
这样的魔术。因此,当我更新模型时,不需要更新方法。
我尝试过Reflections,但是它返回了模型的所有理论依赖关系/连接,不是吗?我需要来自数据库的相关记录。
类似X.where(user_id: @user.id)
或@user.dependents
有可能吗?
答案 0 :(得分:2)
您可以将必需的对象分配给model
,然后
model.class.reflect_on_all_associations.map { |table| model.method(table.name).call }.select(&:any?)
例如:
user = User.first
user.class.reflect_on_all_associations.map { |table| user.method(table.name).call }.select(&:any?)
# returns all associated objects of first user
您可以使用:has_many
,:has_one
或:belongs_to
作为reflect_on_all_associations
的参数来指定结果。
可能还有更优雅的方法,但是它可行。
答案 1 :(得分:1)
TL; DR不要这样做:)
您可以使用反射执行类似的操作。例如
@user.class.reflections.keys.flat_map { |reflection| me.send(reflection) }
将为您提供一个数组,其中包含与用户关联的所有对象。但是下一步是什么?
对于此列表成员周围的几乎任何现实世界逻辑(AR :: Base的基础知识除外),您将必须检查对象的类或使用容易出错的{ {1}}魔术-有时这两种选择都是合理的权衡取舍,但是在大多数实际情况下,我宁愿使用气味较弱的解决方案(即使它们有些冗长)。