2011-11-28 54 views
0

我有一個Rails 3.0應用程序,它具有一個簡單的投票機制,可以將計數添加到多個反對票中。我在routes.rb中設置了PUT路由,並在我的控制器中創建了一個方法來處理它。向下投票鏈接本身呈現正確,但點擊它給了我一個路由錯誤沒有路由匹配「/場/ 18/down_vote」錯誤。Rails 3.0:PUT成員路由上沒有路由錯誤

這裏是我的控制器代碼:

def down_vote 
    @venue = Venue.find(params[:id]) 

    respond_to do |format| 
    if @venue.update_attribute(:mon_closed_accuracy_downvotes => @venue.mon_closed_accuracy_downvotes + 1) 
     format.html { redirect_to(:back, :flash => { :success => "Shenanigans were successfully called on #{ @venue.name }'s closing time." }) } 
     format.xml { head :ok } 
    else 
     format.html { render :action => 'show' } 
     format.xml { render :xml => @venue.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

下面是該down_vote路線我的路線代碼:(對場地的名單內的部分)

resources :venues do 
    put 'down_vote', :on => :member 
end 

查看代碼:

<%= link_to 'Incorrect?', down_vote_venue_path(venue), :method => :put %> 

同樣,視圖本身呈現良好,並且鏈接按預期呈現:

<a href="/venues/15/down_vote" data-method="put" rel="nofollow">Incorrect?</a> 

任何想法?

+0

你說得對。我誤解了API。可能會把這個問題與其他東西混雜在一起。對不起,關於:)你可以確認在應用程序日誌中,服務器確實收到了PUT請求嗎? – leonardoborges

+0

不用擔心。 :)現在我正在查看日誌,看起來它實際上正在做一個GET請求,出於某種原因:在2011-11-28 01:01:41開始GET「/場館/ 18/down_vote」爲127.0.0.1 - 0500。奇怪的是,它認爲它會執行放置請求,因爲數據方法屬性按預期形成。 – huertanix

+0

我仍然會切換到使用按鈕,因爲鏈接需要'GET'資源,並且可以右鍵單擊並在新選項卡/窗口中打開。 – leonardoborges

回答

0

聽起來像你的JavaScript有問題。你是否包含正確的文件?你的佈局是什麼樣的?

+0

除了我添加的Mapstraction和Google Maps API之外,這是Rails在佈局中包含的內容: huertanix

+0

看起來像我的版本的jQuery是1.5,並且在您的投票示例中不包括jquery_ujs.js文件:https://github.com/BM5k/vote_sample/tree/master/public/javascripts,它使用1.7。我安裝的jquery-rails gem似乎把一堆東西放在rails.js中來處理它。我會嘗試更新寶石... – huertanix

+0

我使用jquery-rails [1.0.18](https://github.com/rails/jquery-rails/tree/546029a1bf45566f98b3d69abca852f593bf9f26) 它更改腳本的列表包含在'= javascript_include_tag:defaults'中,這樣jquery,jquery-ui(如果使用)和jquery-ujs腳本全部加載 另外,在jQuery是默認的rails 3.1中,所有這些都更加容易。 – BM5k

相關問題