我需要在两个类之间找到连接表的名称,例如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
但是,这不考虑自定义连接表名称。有没有办法获得实际的连接表名称?
答案 0 :(得分:0)
如果有自定义连接表,您可以按如下方式检索它...
Client.new.association(:languages).options[:join_table]
答案 1 :(得分:0)
因此,确实有一种方法可以返回由ActiveRecord迁移创建的连接表的精确名称。逻辑上,必须有一个在生成表时提供名称,不是吗? 所以,ActiveRecord的AssociationReflection类确实有一个&#34; join_table&#34;返回声明的表名的方法(如果存在),否则返回派生名。
在该类定义中有一些非常有趣的方法。值得一看。
答案 2 :(得分:0)
使用Rails 5,SteveTurczyn的答案对我不起作用,但是我找到了一个替代方法
Client.reflections["languages"].join_table
我知道问这个问题已经有几年了,但是希望这可以帮助到别人。