#ruby-on-rails #path #redirect #root
#ruby-on-rails #путь #перенаправление #root
Вопрос:
Я хочу сделать перенаправление на index.html в моем приложении / общедоступной папке.
def get_current_user
@current_user = current_user
if @current_user.nil?
redirect_to root_path
end
end
Как мне этого добиться?
Я не изменял root в моем routes.rb (он все еще прокомментирован)
# root :to => "welcome#index"
Я получаю сообщение об ошибке, в котором говорится, что root_path не определен.
Как мне изменить routes.rb так, чтобы root_path указывал на public/index.html ?
Комментарии:
1. Вместо использования
root_path
используйтеredirect_to '/'
2. @meagar Это ответ, а не комментарий, так почему бы вам просто не создать свой ответ вместо комментария к вопросу?
3. @MBO Это не ответ. Вопрос был «Как мне сделать X?», а мой комментарий был «Не надо, вместо этого сделайте Y». Это неприемлемый ответ, IMO, и я бы проголосовал против других за публикацию его как такового.
Ответ №1:
Вы можете назначить именованный маршрут статическому файлу, передав любую непустую строку как :controller
и путь к файлу в качестве :action
для маршрута:
Application.routes.draw do
root :controller => 'static', :action => '/'
# or
# root :controller => 'static', :action => '/public/index.html'
end
# elsewhere
redirect_to root_path # redirect to /
Предполагая, что у вас есть public/index.html
, это то, что будет подано.
Комментарии:
1. выполнение этого также означает, что обслуживаемое представление не имеет ничего общего с другими представлениями в приложении, что действительно маловероятно. Представления имеют общую компоновку, в этом прелесть сухости Rails.
2. @apneadiving Это подразумевает гораздо больше, чем просто отсутствие общего макета, но в этом нет ничего плохого. Если вы собираетесь обслуживать статический индексный файл, то, по-видимому, вы решили, что не существует общего макета, и нет абсолютно никаких причин не обслуживать
index.html
таким образом.3. @meagar Полностью. На самом деле, IMO это выбор между общим макетом (MVC) и быстрым откликом (статические файлы). Rails поддерживает оба варианта, прелесть гибкости Rails. (В случае с MVC я все еще могу использовать CSS, чтобы сохранить несколько общий вид.)
Ответ №2:
на контроллере
redirect_to root_path ## (will redirect to root '/')
Ответ №3:
файл маршрута:
root 'main#index'
контроллер:
class MainController < ApplicationController
def index
redirect_to '/index.html'
end
end
и при использовании rails 4 controller action live это может вести себя как одностраничное приложение, использующее M amp; C с изюминкой на V
Комментарии:
1. На самом деле вам даже не нужно определять
def index
действие. Достаточно только определить контроллер и индексный файл. Rails пропустит действие в маршруте, если оно не найдено.
Ответ №4:
То, что вы хотите сделать, несовместимо с Rails.
Rails — это MVC, C для контроллера, V для представления.
Итак, его внутренним устройствам нужны оба.
Ok, public/index.html
отображается по умолчанию, но это просто потому, что процесс обойден.
Итак, вы могли бы создать static
контроллер с index
действием и соответствующим ему представлением (просто скопируйте / вставьте в него содержимое вашего текущего public/index.html
файла).
Затем установите:
root :to => "static#index"
И, пожалуйста, удалите public/index.html
файл 🙂
Комментарии:
1. Rails поддерживает обслуживание статического содержимого из
public
каталога. Это полностью «совместимо с Rails».2. @apneadiving Rails поставляется со статическим
public/index.html
из коробки для каждого нового проекта, и это работает довольно хорошо. Вы могли бы также сказать ему, что он должен коснуться базы данных, иначе он не использует ‘M’ в ‘MVC’.3. Также «Rails — это MVC, C для контроллера, V для представления. Поэтому его внутренним устройствам нужны оба » полностью неверно. Каждый раз, когда вы выполняете a
redirect_to
, вы не используете «V» в MVC.4. @meagar Я новичок в Rails (и MVC в целом), не могли бы вы подробнее объяснить, почему a
redirect_to
означает, что мы не используем ‘V’? Я этого не понимаю. Если для этого потребуется новый вопрос с длинным ответом, скажите мне, я его создам!5. @Lucas При вызове из действия контроллера не задействовано представление
redirect_to
.
Ответ №5:
routes.rb
...
root to: redirect('public/index.html')
...
Это перенаправит весь запрос на '/'
, на 'public/index.html'
.