2016-10-16 13 views
0

私はビデオショーページ(投稿に属しています)にいます。 link_to deleteは、その動画表示ページにコメントを作成するまでうまく機能します。私はポイントが戻っレールれるそのビデオにコメントを作成するまで削除LINK_TOビデオが機能していることを確認カピバラの一連のテストを...持ってRails、link_toメソッド::子要素の後にブレークを削除する(コメント)

ここで何が起こっているかまたはそれを修正する方法がわから
Failure/Error: <%= link_to "Delete Video", post_video_path(@video), method: :delete %> 

ActionView::Template::Error: 
    No route matches 

ありません。私はで梃子に立ち往生し、それを打つ最初の2つのテストは、私はパスをチェックし...

post_video_path(@video) 

有効なパスを返され、例えば

仕様はコメントをインスタンス化するときは、次のようにパスを読み込む
[1] pry(#<#<Class:0x007f891941dee0>>)> post_video_path(@video) 
=> "/posts/1/videos/1" 

...

[1] pry(#<#<Class:0x007f891c2fd0a8>>)> post_video_path(@video) 
ActionController::UrlGenerationError: No route matches {:action=>"show", :controller=>"videos", :post_id=>#<Video id: 1, user_id: 1, post_id: 1, title: "18title", url: "https://www.youtube.com/watch?v=tYm_182oCVdSM", embed_id: "https://www.youtube.com/watch?v=tYm_182oCVdSM.spli...", tags: nil, created_at: "2016-10-16 22:12:30", updated_at: "2016-10-16 22:12:30">, :video_id=>"1"} missing required keys: [:id] 

videos_controller.rb

def show 
    @video = Video.find(params[:id]) 
    @user = @video.user 
    @post = @video.post 
    @comment = Comment.new 
    @comments = @video.comments 
end 

動画/ show.html.erb

<%= @video.title %> 
<%= content_tag(:iframe, nil, src: "//www.youtube.com/embed/#{@video.embed_id}") %> 
<% binding.pry %> 
<%= link_to "Delete Video", post_video_path(@video), method: :delete %> 
<%= link_to('Back', user_post_path(@user, @post)) %> 

<h3>Comments</h3> 

<%= form_for [@video, @comment] do |f| %> 
    <%= f.label(:body, "Comment") %> 
    <%= f.text_area(:body) %> 
    <%= f.submit("Submit Comment") %> 
<% end %> 

<% @comments.each do |comment| %> 
    <%= comment.body %> 
    <%= comment.user %> 
<% end %> 

routes.rb

Rails.application.routes.draw do 
    devise_for :users 

    resources :users, only: [] do 
    collection do 
     get '/show_profile', to: 'users#show_profile', as: 'my_profile' 
     get '/show_log', to: 'users#show_log', as: 'my_log' 
    end 
    resources :posts, only: [:new, :create, :show] 
    end 

    resources :posts do 
    resources :videos 
    end 

    resources :videos do 
    resources :comments 
    end 

    root 'home#index' 
end 

モデル/ comment.rb

class Comment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :video 

    validates :body, presence: true 
end 

あなたが任意の特定のファイルやコードを見たい場合は私に知らせてください。

ありがとうございます!

+1

ようこそスタックオーバーフローへようこそ。 「[mcve]」をお読みください。私たちはあなたが私たちに与えたコードと入力データに基づいて問題を再現することができなければなりません。あなたの質問を含む印刷されたページで同僚が歩いてきたら、それをあなたに渡して歩いて行きました。質問に答えることができますか?あなたは何を求めますか?その追加情報をあなたの質問に追加してください。私たちはそれを尋ねるか、それが何だったかを推測しようとしています。推測すると、誰もやらないような野生の答えが出てくるでしょう。良い。 –

+1

注目。私はすべての関連性を追加したと信じています。私が何かを欠けているなら、私に知らせてください。 –

+1

優れています。ありがとうございました!それを掘り下げて答えを見つけようとするのは本当に重要です。あなたがあなたの質問にした仕事を要約することができない場合は、あなたの仕事を複製して前進するために十分なものを提供してください。それがなければ、あなたが試したことを複製するか、悪化して、あなたが何を知っていて、すべきかを教えようとしました! :-)そして、あなたの質問は、将来同様の解決策を探している人たちを助けるでしょう。今あなたを助けるだけではありません。だから私たちは尋ねて答えます。 –

答えて

0

一般的に言えば、2つのモデルの名前を持つパス名を使用する場合、2つのモデルを渡す必要があります。

例えば、あなたのケースで、あなたのパスがpost_video_path(@video)です - あなたはそれをpostvideo例えばpost_video_path(@post, @video)

を渡すために何、これは期待することはあなたがいない場合は...それは混乱しますです、多分にありますあなたが期待していなかったやり方。この場合、私はビデオのIDをとって、それがpost_idだと仮定していると推測しています。

あなたはそれがこのエラーメッセージを見て混乱しています伝えることができます:

ActionController::UrlGenerationError: No route matches {:action=>"show", :controller=>"videos", :post_id=>#<Video id: 1, user_id: 1, post_id: 1, title: "18title", 

持って具体的に一部::post_id=>#<Video id: 1, ... - >をそれはpost_idでビデオを入れています。あなたが1つの投稿と1つのビデオを持っていたので、以前は "働いていた"のかもしれません...ビデオのとして1のIDを使用したときポストID ...ビデオは既に割り当てられていますポスト(それも1のIDを持っていた)...しかし、一度それを削除すると、それはもはや存在しません。これは完全な推測です。エラーがどこに来るのかを認識している限り、これがRailsの混乱を招くかどうかは関係ありません。

+1

これはまさに私の問題でした。ありがとうございました! –

関連する問題