2017-06-06 41 views
0

我有一個鏈接控制器,我定義了兩個自定義操作,分別稱爲upvote和downvote。操作定義: -在控制器和添加的路由中定義了一個自定義操作,但仍然沒有路由匹配錯誤。 Rails 5應用程序

def upvote 
    @link = Link.find_by(id: params[:id]) 
    @link.vote_count += 1 
    flash[:message]="Vote successfully registered" 
    redirect_to root_path 
    end 

    def downvote 
    @link = Link.find_by(id: params[:id]) 
    @link.vote_count -= 1 
    flash[:message]="Vote successfully registered" 
    redirect_to root_path 
    end 

我已經添加了這些行動路線中的routes.rb文件: -

post '/links/:id', to: 'links#upvote', as: 'upvote' 
    post '/links/:id', to: 'links#downvote', as: 'downvote' 

軌道路線顯示: -

upvote POST /links/:id(.:format)  links#upvote 
downvote POST /links/:id(.:format)  links#downvote 

我從視圖中調用動作如下: -

<% if link.user != current_user %> 
    <span class="vote-buttons"> 
    <div class="btn-group-vertical" role="group" aria-label="vote-buttons"> 
     <%= button_to 'Up', 'upvote_path', type:"button", class:"btn btn-xs btn-success" %> 
     <%= button_to 'Down', 'downvote_path', type:"button", class:"btn btn-xs btn-danger" %> 
    </div> 
    </span> 
<% end %> 

但是我不斷收到此錯誤: -

No route matches [POST] "/upvote_path" 

爲什麼我看到這個,即使軌道路線顯示路線存在?

我也試過重新啓動服務器。

+0

你定義它作爲一個POST請求那你爲什麼包括:ID的路線,你可以簡單地定義它像這樣=>郵報「/鏈接」,到: 'links#upvote',如:'upvote'並像upvote_path一樣使用它 – Navin

+0

我需要使用upvote/downvote操作中的params鏈接的id。 – RawCode

+0

所以讓它獲得GET請求,像這樣=> get'/ links /:id',to:'links#upvote',as:'upvote'並且像這樣使用它=> upvote_path(id:link.id) – Navin

回答

1

No route matches [POST] "/upvote_path"

根據你的路線,你缺少一個:id應的路線內發送。

<%= button_to 'Up', upvote_path(link), type:"button", class:"btn btn-xs btn-success" %> 

同樣適用於downvote

<%= button_to 'Down', downvote_path(link), type:"button", class:"btn btn-xs btn-danger" %> 

除了以上問題,你是一個給予好評downvote後不節能@link

def upvote 
    @link = Link.find_by(id: params[:id]) 
    @link.vote_count += 1 
    @link.save! 
    flash[:message]="Vote successfully registered" 
    redirect_to root_path 
end 

def downvote 
    @link = Link.find_by(id: params[:id]) 
    @link.vote_count -= 1 
    @link.save! 
    flash[:message]="Vote successfully registered" 
    redirect_to root_path 
end 
+0

試過這個。還有同樣的錯誤: - 在2017-06-06 18:10:36 +0530 ActionController :: RoutingError(沒有路由匹配[POST]「/ upvote_path(link))時啓動POST」/ upvote_path(link) 「): – RawCode

+0

@rawcode馬上檢查! – Pavan

+0

嘗試了保存。同樣的錯誤。 – RawCode

1
<%= button_to 'Up', 'upvote_path', ... 

這裏按鈕的URL字面上是"upvote_path"。當然,這個URL不存在。我覺得你的意思是這樣的:

<%= button_to 'Up', upvote_path(link), ... 
+0

@pavan建議同樣的,我試了一下。還是一樣的錯誤。 – RawCode

+0

@rawcode:「仍然是同樣的錯誤。」 - 我不這麼認爲。你沒有注意到引號或仔細閱讀答案。 –

+0

哎呀,你是對的。 – RawCode