我在一个视频节目页面(属于一个帖子)。 link_to delete工作正常,直到我在该视频节目页面上创建评论。我有一系列的水豚测试验证link_to删除视频是否正常工作,直到我在该视频上创建评论,此时rails返回...
Failure/Error: <%= link_to "Delete Video", post_video_path(@video), method: :delete %>
ActionView::Template::Error:
No route matches
不确定这里发生了什么或如何修复它。我抓住了一个撬进去,前两个测试点击了它我检查了路径......
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]
def show
@video = Video.find(params[:id])
@user = @video.user
@post = @video.post
@comment = Comment.new
@comments = @video.comments
end
<%= @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 %>
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
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :video
validates :body, presence: true
end
如果您想查看任何特定文件或代码,请与我们联系。
谢谢!
答案 0 :(得分:0)
一般来说 - 当您使用具有两个模型名称的路径名时,您需要将其传递给两个模型。
例如,在您的情况下,您的路径为post_video_path(@video)
- 您希望将post
和video
传递给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, ...
- &gt;它将视频放入post_id
。很可能它只是&#34;工作&#34;之前因为您有一个帖子和一个视频...因此当它使用视频中1
的ID作为的后ID时...视频已经分配给帖子(也有一个id为1)...但是一旦你删除了那个,它就不再存在了。这是一个完全的猜测 - 只要你认识到错误的来源,Rongs如何混淆并不重要。