#ruby-on-rails #refactoring
#ruby-на-рельсах #рефакторинг #ruby-on-rails
Вопрос:
Рефакторинг этого:
redirect_to "http://#{@school.id}" '.' request.domain request.port_string '/'
Это внутри школьного контроллера:
def create
@school = School.new(params[:school])
if @school.save
redirect_to "http://#{@school.id}" '.' request.domain request.port_string '/'
else
render "new", :layout => nil
end
end
Чтобы он перенаправлял на:
subdomain.domain.dom/
Маршруты:
ресурсы: корень школы:кому => «школы#показать»
Что пробовали:
redirect_to(:host=>@school.id '.' request.domain request.port_string)
Сбой, потому что он перенаправляет на http://subdomain.domain.dom/schools
И как мне передать уведомление?
У меня есть это в представлении:
<% if flash[:notice] -%>
<div id="info_panel">
<%= flash[:notice] -%>
</div>
<% end -%>
И это в контроллере:
flash[:notice] = "School created"
redirect_to(school_base(@school.id))
Ответ №1:
redirect_to "http://#{@school.id}.#{request.domain}#{request.port_string}/"
Если вы будете использовать это регулярно, возможно, вам захочется рассмотреть возможность добавления метода в ApplicationController в соответствии с:
def url_for_school(school)
"http://#{school.id}.#{request.domain}#{request.port_string}/"
end
helper_method :url_for_school
Комментарии:
1. Неплохо. Как я могу добавить a:notice?
2. Если содержимое поддомена обрабатывается одним и тем же приложением, вы должны быть в состоянии сделать это нормально:
flash[:notice] = "Your notification"
. Если это совершенно отдельное приложение, вы можете рассмотреть возможность передачи его в виде строки запроса, если только вы не хотите настроить файлы cookie для разных приложений. Спросите, нужна ли вам дополнительная информация о последнем.3. Приложение то же самое. Но уведомление : не отображается. У вас есть текущий код для редактирования.
4. Попробуйте изменить настройки домена в вашем хранилище сеансов, как описано здесь: guides.rubyonrails.org /…