2015-12-16 55 views
2

其他解決方案在這裏沒有工作,所以我發佈了一個新問題。我使用acts_as_votable爲上下上的鏈接投票,但是當我嘗試實際投票我得到的錯誤:沒有路線匹配[GET]「/ links/1/like」acts_as_votable

No route matches [GET] "/links/1/like"

這是我的看法是什麼樣子:

<%= link_to like_link_path(link), method: :put, class: "btn btn-default btn-sm" do %> 
     <span class="glyphicon glyphicon-chevron-up"></span> 
     Upvote 
     <%= link.get_upvotes.size %> 
     <% end %> 
     <%= link_to dislike_link_path(link), method: :put, class: "btn btn-default btn-sm" do %> 
     <span class="glyphicon glyphicon-chevron-down"> 
     Downvote 
     <%= link.get_downvotes.size %> 
     <% end %> 

這是我的路線是這樣的:

resources :links do 
    member do 
     put "like", to: "links#upvote" 
     put "dislike", to: "links#downvote" 
    end 
    end 

我看到我的客戶正試圖訪問get方法,但我明確地調用method: :put在我dex.html.erb文件。

你知道它爲什麼試圖訪問get以及如何覆蓋它嗎?

回答

1

事實證明,答案與JQuery有關。我得到了一個Uncaught ReferenceError: jQuery is not defined錯誤,所以我做的是在我的application.html.erb文件中直接包含JQuery。

你必須把它放在所有其他腳本之前。

<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> 

之後,投票開始工作

2

這個問題幾乎總是與JQuery有關,儘管在這種情況下我不知道爲什麼。

你甚至可以看到它here

Note that if the user has JavaScript disabled, the request will fall back to using GET

我會首先檢查是否有JQuery的在你的應用程序,然後,它的獲取調用好。如果它沒有被加載,那麼最好的行爲就是明白爲什麼JQuery沒有被調用(它要麼因爲它不會被引用,要麼會導致錯誤導致它無法加載)。

你的代碼實際上看起來有效,所以我不得不說,JQuery將是可能的問題在這裏。


你可以擦亮你的路由等:

#config/routes.rb 
resources :links do 
    match "vote", action: :vote, via: [:put,:delete], on: :member 
end 

這將發送兩種類型的請求被稱爲vote一個動作,然後你就可以分裂如下:

​​

DRY呃更有效率(只叫一個動作等)

+0

做downvote,並給予好評的動作都需要放在請求有關係嗎?我只是想知道它是如何爲我自己的理解而工作的,我在採取行動方面遇到了一些麻煩。 – Jbur43

+0

如果您要在自己的控制器中定義動作,則可以使用您喜歡的任何路線。我使用我在我工作的應用程序中提供的路線,因爲這是一個「切換」投票的單一操作。你可以使用任何你想要的方法。 –