保存我们的Video对象时,我们在尝试重定向到视频#watch动作并查看对象时遇到no method vide_url错误
管理/视频/控制器
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 :(得分:4)
是的,这是您的自定义路线。 redirect_to @video
基本上会调用url_for @video
。来自url_for
的文档:
依赖命名路线
传递记录(如Active Record)而不是散列 options参数将触发该记录的命名路由。该 查找将在类的名称上进行。所以通过一个研讨会 object将尝试使用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)
答案 1 :(得分: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