我需要找到兩個類之間的連接表的名稱,例如Client和Language。我需要能夠以編程方式執行此操作,因爲我正在生成一個複雜的SQL查詢,該查詢必須自動解釋新的關係。如何獲取ActiveRecord關聯中的連接表名稱?
我的最好的辦法是使用兩個班表名和聯接表命名約定將它們組合起來:
if Client.table_name < Language.table_name
Client.table_name + '_' + Language.table_name
else
Language.table_name + '_' + Client.table_name
end
然而,這並不佔自定義連接表的名稱。有沒有辦法獲得實際的連接表名稱?
您的代碼有點問題,因爲連接表名稱來自類名稱,而不是來自表名稱。你可以有一個類爲'self.table_name ='users''的類客戶端,所以當實際上默認的連接表是'clients_languages'時,你得到的表名是'languages_users'。更好的是'Client.to_s.tableize' – SteveTurczyn
另外請注意,Rails 4改變了多個單詞和共同起始單詞的連接表的命名約定... ContractType和ContractPlan連接表將是'contract_plans_types' http:// ruby- journal.com/rails-4-changes-join-table-naming-convention/ – SteveTurczyn
@SteveTurczyn這正是我想要查找的原因,如果有一種現有的方法提供生成或自定義連接表名稱而無需知道哪個是哪個。幸運的是,下面的答案幫助我找到了這樣一種方法。 –