Как сделать так, чтобы база данных была разделена на несколько столбцов с помощью Active :: Record - PullRequest
2 голосов
/ 09 июля 2010

Предположим, что столбец client_id является повсеместным в нашей базе данных, и для данного сеанса или запроса мы все время будем «в контексте» клиента.

Существует ли способ имитации хранения данных каждого клиента в отдельной базе данных при сохранении их в одной таблице для более простого управления базой данных?То, что я хочу, похоже на область по умолчанию, но так как она будет меняться для каждого запроса, она не может быть исправлена ​​во время загрузки.

  # invoices table data
  # -------------------
  # id       client_id     amount
  # 1        1             100.00
  # 2        2             100.00
  with_client( Client.find(1) ) do
     Invoices.all      # finds only invoice 1
     Invoices.find(2)  # finds nothing or raises
  end 

Как я могу сделать это с ActiveRecord или в каких точкахМогу ли я хирургически изменить AR, чтобы повлиять на это поведение?

Дополнительные баллы: Я бы хотел предотвратить обновление этого столбца client_id - он должен быть исправлен во время создания

Ответы [ 2 ]

1 голос
/ 09 июля 2010
class Client < ActiveRecord::Base
  has_one :invoice, :dependent => :destroy
end

class Invoice < ActiveRecord::Base
  belongs_to :client
end

In controller

   @client= Client.find(1)
   @client.invoice #finds  id  =1     client_id  =1   amount=100.0
0 голосов
/ 09 июля 2010

Здесь есть презентация , в которой рассматриваются мультитенантные приложения.У него есть несколько интересных идей по использованию схем баз данных, особенно для postgres.

...