2013-03-07 72 views
5

爲我的應用程序,我有幾個表(franceusers,belgiumusers,...),我想使用一個或另一個取決於域 我試着用table_name_prefix和table_name但它似乎不起作用自定義table_name用於設計的用戶

class User < ActiveRecord::Base 
rolify 
# Include default devise modules. Others available are: 
# :token_authenticatable, :confirmable, 
# :lockable, :timeoutable and :omniauthable 
devise :database_authenticatable, :registerable, #:confirmable, 
:recoverable, :rememberable, :trackable, :validatable 

def self.table_name 
debugger 
'franceusers' 
end 

def self.table_name_prefix 
debugger 
'france' 
end 
end 

感謝調試器,我可以看到,被稱爲,但不self.table_name_prefix。即使self.table_name好象叫,制定搜索用戶表的用戶,而不是franceusers

在控制檯 User.table_name => 「franceusers」

User.table_name_prefix => 「法國」

更多奇怪的是,即時通訊也使用activeadmin,並且當我瀏覽用戶列表時,我有一個錯誤: Mysql2 ::錯誤:未知列'franceusers.id'在'訂單子句'中:SELECT users。* FROM users ORDER BY franceusers.id desc LIMIT 30 OFFSET 0

它似乎可以找到table_prefix字段b不適用於FROM。

我做什麼壞事?有沒有另一種方式來改變用戶表名? 我不能參加一個所有用戶的表,因爲它是我的老闆的指令:-s

感謝

回答

0

如果您有不同類型的用戶,你必須從上面,他們每一個都必須在不同的要求數據庫,那麼我可能會爲每個數據庫創建一個用戶類(假設我們正在談論5-10而不是100)。

有一個法國用戶和一個西班牙用戶等。然後將通用的設計邏輯提取到一個模塊中,您可以在每個類中包含該模塊。您還需要重寫登錄/註冊/ etc控制器,以便它能夠將各個表連接在一起並搜索正確的用戶。您還需要在多個數據庫表中實現電子郵件唯一性約束等。基本上它聽起來像一個非常糟糕的主意,你將不得不做很多工作,否則你可以免費獲得設計。

這是可行的,但我會建議你找出你的老闆用什麼樣的用例將你的數據分成多個表格,然後找到更好的方法來解決他的問題。它可能只是簡單的想要簡單的報告,並且有比解決這些問題更簡單,更優雅的方法,然後重寫其一半的功能。

祝你好運:)