Я создаю приложение с множеством приложений, основанное на идеях книги Райана Бигга «Многопользовательская связь с рельсами». В этой книге арендаторы имеют свой собственный поддомен. Этот подход не применим в моем случае, поэтому я пытаюсь использовать область с помощью имени учетной записи.Маршрутизация Rails: Область применения поля базы данных
Так что вместо URL-адресов, как http://account-name.myapp.com
, я хочу http://myapp.mydomain.com/account-name/
. Субдомен зарезервирован для самого приложения, потому что я хочу иметь более одного приложения в своем домене.
Вот кусок моего routes.rb:
scope module: 'accounts' do
resources :customers do
resources :notes
end
end
Чтобы достичь своей цели, я стараюсь следовать руководству маршрутизации на rubyonrails.com (последний фрагмент кода в главе 4.5), и изменить приведенный выше код :
scope ':slug', module: 'accounts' do
resources :customers do
resources :notes
end
end
slug
является атрибутом в accounts
таблицы в базе данных, поэтому, если учетная запись называется «Мой бизнес», слизняк обычно будет «мой бизнес».
Это изменение, кажется, исправить мои маршруты:
customers GET /:slug/customers(.:format)
.. но это также, кажется, сломать мой сайт, как слизняк не извлекается из базы данных. Я не могу представить, как это работает scope':slug', module: 'accounts'
. Должен ли Rails автоматически распознавать: slug как атрибут таблицы Accoounts? Если нет, может ли кто-нибудь помочь мне найти способ использовать пул аккаунта в моих URL-адресах?
Я уже пару дней пробовал погулять и читал многочисленные ответы здесь на Stackoverflow. Ничто не помогло, поэтому любые указатели очень ценятся. :-)
EDIT:
Соответствующие контроллеры настроены так:
controllers/accounts/base_controller.rb
controllers/accounts/customers_controller.rb
controllers/accounts/products_controlelr.rb
controllers/accounts_controller.rb
controllers/application_controller.rb
accounts_controller.rb имеет только действия для новых и создать в этой точке.
Счет/base_controller.rb выглядеть следующим образом:
module Accounts
class BaseController < ApplicationController
before_action :authorize_user!
def current_account
@current_account ||= Account.find_by_slug(params[:slug])
end
...
end
end
Я addded это моя модель счета:
def to_param
slug
end
Прежде я пытался реализовать scope ':slug'
в моих маршрутах, Everyting работал при входе в тех случаях, когда они направлены на myapp.mydomain.com/dashboard и перемещаются по адресу myapp.mydomain.com/customers. Теперь он работает с myapp.mydomain.com/account-name/dashboard, но как только я попытаюсь перейти к представлению, в котором используются помощники, такие как new_customer_path
, я получаю сообщение об ошибке:
Надеюсь, это упростит мою проблему. :-)
так что вы хотите URL выглядит как 'Http: // MYAPP. счет-имя mydomain.com// 'клиентов? –
Да, «клиенты» - это один из примеров моих контроллеров в модуле учетных записей – GreyEyes