2013-09-10 2 views
1

При сохранении нашего объекта Video мы не получим без ошибки vide_url метода при попытке перенаправить на видео # часов действие и просмотр объектRails не перенаправлять на объект после сохранения

Администратор/Видео/контроллер

def create 
    @video = Video.create(user: User.first, title: params['title'], description: params['description'], file: params['video']['file']) 
redirect_to @video 
end 

Видео/контроллер

def index 
    @videos = Video.page(params[:page]||1) 
end 
def watch 
    @video = Video.find_by!(id: params[:id]) 
end 

Маршруты

get "video/index" 
get "video/watch/:id" => 'video#watch' 
namespace :admin do 
    resources :video 
    resources :playlist 
end 

Любая идея, что происходит? Это потому, что мы используем пользовательские маршруты для видео?

+0

Вы уверены, что видео успешно сохранен? 'create' может возвращать созданное, но не сохраненное видео, если проверки не проходят. – Shadwell

+0

Данные get вводятся в базу данных и отображаются в представлении, а просто перенаправляются, которые не работают. –

+0

Это не решит вашу проблему, но вы не могли использовать «@video = Video.create params [: video]» на вашем admin/video/controller? –

ответ

4

Да, это ваши маршруты. redirect_to @video по существу звонит url_for @video. Из документов для url_for:

Опираясь на названных маршруты

Попутных запись (вроде Active Record) вместо хэша в качестве параметра опций вызовут именованный маршрут для этой записи. Поиск имени будет происходить от имени класса. Поэтому, проходя объект Workshop , вы попытаетесь использовать маршрут workshop_path. Если у вас есть вложенный маршрут , такой как admin_workshop_path, вам придется называть это явно (невозможно, чтобы url_for угадал этот маршрут).

Таким образом, потому что у вас есть пространство имен вокруг этого ресурса вам нужно сделать:

redirect_to admin_video_path(@video) 

или

redirect_to admin_video_url(@video) 

Обновление

Если вы хотите для перенаправления на действие часов вам нужно либо перенаправить на хэш опций, включая это действие:

redirect_to controller: :video, action: :watch, id: @video.id 

Или дайте ваши часы маршрут имя в routes.rb:

get "video/watch/:id", to: 'video#watch', as: :watch_video 

и перенаправить на этот маршрут под названием:

redirect_to watch_video_url(@video) 
+0

Нет Мне нужно это, чтобы вернуться к Контролю видео. Наблюдайте за действиями ... не администратору. –

+0

Ничего себе, чья-то маркировка агрессивно! Я обновил свой ответ, чтобы отразить обновление до вопроса. – Shadwell

+0

Первый не работает «Нет маршрутных совпадений {: action =>« watch »,: controller =>« admin/video »,: id => 20}», поскольку admin/video помещается в список на видео –

1

Пожалуйста, попробуйте следующее.

def create 
    @video = Video.create(user: User.first, title: params['title'], description: params['description'], file: params['video']['file']) 
    redirect_to admin_video_path(@video) 
end 
Смежные вопросы