Ruby on rails 如何获取反向关联字段,尤其是中间表
我想知道如何得到反向关联字段,给定一个模型上的字段。例如,如果Ruby on rails 如何获取反向关联字段,尤其是中间表,ruby-on-rails,activerecord,associations,Ruby On Rails,Activerecord,Associations,我想知道如何得到反向关联字段,给定一个模型上的字段。例如,如果用户模型对角色模型有一个外键(即属于),并且角色模型与用户模型有适当的关联,那么AFAIK,设置用户。角色等同于将用户添加到角色。用户。我试图找出如何通过编程发现Role.users是User.Role的反向关系 我知道如何使用模型的反射获取ActiveRecord关联。在我给出的示例中,User.reflections['role']将产生所属的关联,而role.reflections['users']将产生在“另一边”有许多反射。
用户
模型对角色
模型有一个外键(即属于
),并且角色
模型与用户
模型有适当的关联,那么AFAIK,设置用户。角色
等同于将用户添加到角色。用户
。我试图找出如何通过编程发现Role.users
是User.Role
的反向关系
我知道如何使用模型的反射获取ActiveRecord关联。在我给出的示例中,User.reflections['role']
将产生所属的关联,而role.reflections['users']
将产生在“另一边”有许多反射。我想知道如何以编程方式计算出Role.users
是User.Role
的反向关联,反之亦然。在Django中,这通常通过检查相关的\u name
属性来完成
现在我正在检查反射,并通过使用反射对象的外键
属性来确定反射是否在另一侧。例如,User.reflections['role'].foreign\u key
和role.reflections['users'].foreign\u key
都将返回role\u id
但是,这对某些关联不起作用,例如一些多对多或:通过关联。如果一个模型与同一个模型有多个关联,我尝试过的其他一些方法就不起作用
如何确定另一个模型上的哪个反射/字段与特定模型上的给定字段相对应?您可以使用User.reflections['role'].
的反向。要使用:通过关联-您需要在两个模型上明确反向的点。比如说
class标记
您可以使用User.reflections['role']。与相反。要使用:通过关联-您需要在两个模型上明确反向的点。比如说
class标记
我想你可能需要明确的:即使是正常的所属的/也有很多的关联,因为在我的环境中,User.reflections['role'].
的反向返回nil
。如果你没有正确设置inverse\u
设置,它将返回nil
,我同意你的看法。这很糟糕,因为太多rails应用程序依赖ActiveRecord来为它们建立关联,但在反射中,以编程方式进入“另一边”会很好。我还发现,对于HABTM来说,比较另一个模型的反射,看哪一个的关联\u外键
与源反射的外键
匹配是很有用的。我认为你可能需要显式的:即使是正常的所属的/也有许多关联,因为在我的环境中,User.reflections['role'].inverse\u of
返回nil
。如果您没有正确设置inverse\u of
设置,它将返回nil
。是的,我同意您的看法。这很糟糕,因为太多rails应用程序依赖ActiveRecord来为它们建立关联,但在反射中,以编程方式进入“另一边”会很好。我还发现,对于HABTM,比较另一个模型的反射,以查看哪一个的association\u foreign\u key
与源反射的foreign\u key
匹配是有用的。