Как стать автором
Обновить

Комментарии 10

Я использовал subdomain-fu для такой задачи.
Посмотрел на него еще раз, вспомнил что не понравилось, не было возможности контролировать поддомен по записям в таблице (либо плохо смотрел), да и синтаксис хотелось более наглядный.
По mvc, субдомены относятся к контроллеру. Вносить сюда модель нельзя.
Хорошо, допустим вносить нельзя. Тогда как разрулить такое:
— нужно 2 поддомена статичных (например admin и api)
— нужно X поддоменов, соответствующих например городу, пользователи соответственно как удаляются так и появляются переодически

Пока не могу придумать как обойтись без обращения к модели.
И не совсем понятно почему сюда нельзя внести модель. Да это контроллер, но всегда считал что контроллеру как раз и разрешено оперировать с моделями напрямую.

PS: ИМХО MVC не священная корова, если нельзя но очень нужно, то аккуратно можно.
Иисус! извините конечно, но этот код не читаем и местами не работает

хотябы:
case — when при работе с класами ведет себя как is_a?

было:

@subdomains = case param.class.to_s
when «String», «Symbol»
[param]
when «Array»
param
else
[]
end

стало:

@subdomains = case param
when String, Symbol, Array
param.to_a
else
[]
end

Хотя наверно лучше выкинуть исключение если передан неправильный параметр, а то потом замучаетесь с отладкой (объект создается корректный но не работает)

Вот это вообще не работает:

obj = case @model.class
when String
@model.classify.constantize
when Symbol
@model.to_s.classify.constantize
else
@model
end

должно быть:

obj = case @model
when String, Symbol
@model.to_s.classify.constantize
else
@model
end

а вот это:

@subdomains.map {|i| i.to_s == request.subdomain }.include? true

что-то из разряда $bool.to_s.length == 4
должно быть:
@subdomains.include?(request.subdomain)

только тогда в конструкторе нужно приводить к строкам пирмерно вот так:
@subdomains.map!(&:to_s)

ну и по мелочи:
было:
obj.superclass == ActiveRecord::Base
стало:
obj.is_a?(ActiveRecord::Base)

было:
obj.where(field.to_sym => request.subdomain).first.present?
стало:
obj.where(field.to_sym => request.subdomain).exists?

и это только на вскидку первые два листинга!
Большое спасибо :) Язык в стадии освоения (больше как хобби) и после C++ проскакивают кальки с него. Буду учить глубже.
По поводу не работоспособности, проверял на тестовом приложении. Все моменты отрабатывали, посмотрю тогда внимательней.
Хэл Фултон «Программирование на языке Ruby» (The Ruby way) — отличная книга.
Ваше решение, как я понимаю, напрочь лишено главного достоинства, которое есть в вышеуказанном subdomain-fu — url_for(:controller => :user, :action => :home, :subdomain=>@user.login).
Нет, мое решение это продолжение того примера что дан в скринкасте (ссылка в начале топика), а там как раз и url_for описан и остальные моменты, которые нужно настроить. Если это необходимо то могу указать этот момент в статье.
ясно. Тогда здорово. Но работать еще есть над чем. Выше уже об этом было сказано. Успехов.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.