2014-12-04 50 views
0

我想在我的應用程序中想出upvote/downvote方法,並且遇到無方法錯誤。未定義的方法`post_up_vote_path'

這裏是我的選民形式:

<div> 
    <div class= 'pull-left'> 
    <div><%= link_to " ", post_up_vote_path(post), class: 'glyphicon plyphicon-chevron-up', method: :post %></div> 
    <div><strong><%= post.points %></strong></div> 
    <div><%= link_to " ", post_down_vote_path(post), class: 'glyphicon plyphicon-chevron-up', method: :post %></div> 
</div> 

這裏是我的路線:

App::Application.routes.draw do 

devise_for :users 
resources :users 

resources :topics do 
resources :posts, except: [:index] do 
    resources :comments, only: [:create, :destroy] 
    post '/up-vote' => 'votes#post_up_vote', as: :up_vote 
    post '/down-vote' => 'votes#post_down_vote', as: :down_vote 
end 
end 
get 'about' => 'welcome#about' 
root to: 'welcome#index' 
end 

,這裏是我的部分呼叫:

<%= render partial: 'votes/voter', locals: { post: post } %> 

現在我不認爲我的部分電話或我的選民部分是有問題的,因爲一切工作,直到我嘗試路由它。

+0

您可以運行捆綁EXEC耙路線,以瞭解所生成軌網址助手 – emaxi 2014-12-04 01:05:47

+0

你需要用在'成員do'你'vote'路線,因爲他們是採取單一的'POST'路線目的。 – 2014-12-04 01:08:02

+0

@JustinLicata那段代碼是什麼樣的? – Worldofwaffle 2014-12-04 01:35:56

回答

1

首先,你需要改變你的路線。

resources :posts, except: [:index] do 
    resources :comments, only: [:create, :destroy] 

    post 'upvote', on: :member 
    post 'downvote', on: :member 
end 

原因這些成員的路線,而不是路由集正在他們申請的職位......一個Post的集合中的特定成員。

然後,您需要在終端中運行命令rake routes以查看適當的路徑方法。它應該是這樣的

upvote_post_path(:id) 

這需要一個對象傳入..在你的視圖中,你會像你現在使用它。

upvote_post_path(post) 
+0

'on::member',而不是'::: member'。 – sevenseacat 2014-12-04 01:47:15

+0

很好看@sevenseacat。愚蠢的錯誤在我的角色。 – 2014-12-04 01:48:38