我需要找到两个类(例如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
但是,这不考虑自定义联接表名称。有没有一种方法可以获取实际的联接表名称?
如果有自定义联接表,您可以按以下方式检索它...
因此,似乎确实存在一种方法,该方法返回由ActiveRecord迁移创建的联接表的确切名称。从逻辑上讲,必须在生成表时提供名称,对吗?因此,ActiveRecord的AssociationReflection类确实具有一个“ join_table”方法,该方法返回声明的表名(如果存在),否则返回派生的名称。
使用Rails 5,SteveTurczyn的答案对我不起作用,但是我找到了一个替代方法,可以这样做