如何在ActiveRecord关联中获取联接表名称?

问题描述 投票:0回答:3

我需要找到两个类(例如Client和Language)之间的联接表的名称。我需要能够以编程方式执行此操作,因为我正在生成一个复杂的SQL查询,该查询必须自动考虑新的关系。

我最好的主意是在两个类上都使用table_name并通过连接表名称约定将它们组合在一起:

if Client.table_name < Language.table_name
  Client.table_name + '_' + Language.table_name
else
  Language.table_name + '_' + Client.table_name
end

但是,这不考虑自定义联接表名称。有没有一种方法可以获取实际的联接表名称?

ruby-on-rails rails-activerecord
3个回答
0
投票

如果有自定义联接表,您可以按以下方式检索它...


0
投票

因此,似乎确实存在一种方法,该方法返回由ActiveRecord迁移创建的联接表的确切名称。从逻辑上讲,必须在生成表时提供名称,对吗?因此,ActiveRecord的AssociationReflection类确实具有一个“ join_table”方法,该方法返回声明的表名(如果存在),否则返回派生的名称。


0
投票

使用Rails 5,SteveTurczyn的答案对我不起作用,但是我找到了一个替代方法,可以这样做

© www.soinside.com 2019 - 2024. All rights reserved.