Rails: разделение одной базы данных между несколькими поддоменами - PullRequest
3 голосов
/ 01 июля 2011

Я относительно новичок в Rails, и вот моя ситуация:

Я создаю приложение для управления запасами с помощью направляющих, чтобы помочь трем отдельным филиалам компании управлять своими собственными запасами продуктов.

Каждая из этих трех ветвей отслеживает одни и те же продукты, использует одни и те же модели данных, но управляется отдельно.Мой план состоит в том, чтобы создать одно приложение, используя одну базу данных, но такую, которая отслеживает инвентарь во всех трех ветвях.

Мой план состоит в том, чтобы иметь что-то вроде этого:

branch1.inventoryapp.com

branch2.inventoryapp.com

branch3.inventoryapp.com

Каждый поддомен приведет к одному и тому же интерфейсу с одинаковыми функциями и, по сути, одинаковыми представлениями.Единственной разницей будет фактическое содержание их инвентаря, которое будет списком продуктов, которые физически находятся в этой ветке в то время.

Смогу ли я сделать это с маршрутизацией на поддоменах rails?

Должны ли я иметь отдельные контроллеры для каждой ветви?

Должен ли я использовать пространства имен контроллеров?Вложенные ресурсы?

Заранее спасибо!

1 Ответ

3 голосов
/ 01 июля 2011

В вашем application_controller просто:

class ApplicationController < ActionController::Base
  before_filter :current_account
  helper_method :current_account

  def current_account
    @account ||= Account.find_by_domain(request.subdomain)
  end
end

Затем, везде, где-либо:

class WidgetsController < ApplicationController

  def index
    @widgets = current_account.widgets.paginate(:page=>params[:page])
  end

  def show
    @widget = current_account.widgets.find(params[:id])
  end

  def create
    @widget = current_account.widgets.build(params[:widget])
    if @widget.save
      ...
    end
  end
end

Обратив все в @account, вы храните данные раздельно по поддоменам.

Вы также можете использовать current_account в качестве помощника в своих представлениях.

...