2

Video オブジェクトを保存するときに、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

何が起こっているのですか?動画にカスタム ルートを使用しているためでしょうか。

4

2 に答える 2

4

はい、それはカスタム ルートです。redirect_to @video本質的に呼び出しますurl_for @video。のドキュメントからurl_for

名前付きルートに依存する

options パラメーターとしてハッシュの代わりにレコード (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)
于 2013-09-10T14:31:35.100 に答える
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
于 2013-09-10T14:25:46.320 に答える