Да, это тоже работает. Я написал эту проверку более сложным способом, так как мой код должен работать с разными версиями 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

Но какое влияние это может оказать на приложение, учитывая, что там много трафика (тысячи запросов в секунду)? Есть ли что-то, что мне не хватает? Должен ли я попробовать другую стратегию?

Большое спасибо за любые отзывы / мысли!

Ответы на вопрос(1)

Ваш ответ на вопрос