Comments 10
Я использовал subdomain-fu для такой задачи.
+2
Посмотрел на него еще раз, вспомнил что не понравилось, не было возможности контролировать поддомен по записям в таблице (либо плохо смотрел), да и синтаксис хотелось более наглядный.
0
По mvc, субдомены относятся к контроллеру. Вносить сюда модель нельзя.
+1
Хорошо, допустим вносить нельзя. Тогда как разрулить такое:
— нужно 2 поддомена статичных (например admin и api)
— нужно X поддоменов, соответствующих например городу, пользователи соответственно как удаляются так и появляются переодически
Пока не могу придумать как обойтись без обращения к модели.
И не совсем понятно почему сюда нельзя внести модель. Да это контроллер, но всегда считал что контроллеру как раз и разрешено оперировать с моделями напрямую.
PS: ИМХО MVC не священная корова, если нельзя но очень нужно, то аккуратно можно.
— нужно 2 поддомена статичных (например admin и api)
— нужно X поддоменов, соответствующих например городу, пользователи соответственно как удаляются так и появляются переодически
Пока не могу придумать как обойтись без обращения к модели.
И не совсем понятно почему сюда нельзя внести модель. Да это контроллер, но всегда считал что контроллеру как раз и разрешено оперировать с моделями напрямую.
PS: ИМХО MVC не священная корова, если нельзя но очень нужно, то аккуратно можно.
0
Иисус! извините конечно, но этот код не читаем и местами не работает
хотябы:
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?
и это только на вскидку первые два листинга!
хотябы:
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?
и это только на вскидку первые два листинга!
+9
Большое спасибо :) Язык в стадии освоения (больше как хобби) и после C++ проскакивают кальки с него. Буду учить глубже.
По поводу не работоспособности, проверял на тестовом приложении. Все моменты отрабатывали, посмотрю тогда внимательней.
По поводу не работоспособности, проверял на тестовом приложении. Все моменты отрабатывали, посмотрю тогда внимательней.
+1
Ваше решение, как я понимаю, напрочь лишено главного достоинства, которое есть в вышеуказанном subdomain-fu — url_for(:controller => :user, :action => :home, :subdomain=>@user.login).
0
Нет, мое решение это продолжение того примера что дан в скринкасте (ссылка в начале топика), а там как раз и url_for описан и остальные моменты, которые нужно настроить. Если это необходимо то могу указать этот момент в статье.
+1
Sign up to leave a comment.
Поддомены в Rails