Да, это тоже работает. Я написал эту проверку более сложным способом, так как мой код должен работать с разными версиями Rails.
я есть толстое мультитенантное приложение Rails на Apache + mod_passenger, которое выводит цены на продукты из таблицы PostgreSQL следующим образом:
Table "public.products"
Column | Type
id | bigint
name | character varying(100)
price | numeric(8,2)
Тогда внутри products.rb у меня есть ...
class Product < PostgresDatabase
self.table_name = "products"
# ... yadda yadda
end
Я хочу разделить таблицу «products» очень специфическим образом, чтобы я получил что-то вроде products_TENANT-ID для каждого арендатора (в основном представления основной таблицы продуктов, но это уже другая история) и смог сделать запрос следующим образом. :
Products.for_tenant(TENANT-ID).where(:name => "My product")......
Я полагаю, я могу просто создать метод:
class Product < PostgresDatabase
self.table_name = "products"
# ... yadda yadda
def for_tenant(tid)
self.table_name = "products_" + tid.to_s
self
end
end
Но какое влияние это может оказать на приложение, учитывая, что там много трафика (тысячи запросов в секунду)? Есть ли что-то, что мне не хватает? Должен ли я попробовать другую стратегию?
Большое спасибо за любые отзывы / мысли!