2011-03-02 228 views
3

我仍然陷入了Rails的束縛,我遇到了一個我認爲應該很容易的問題。希望有人能告訴我我的方式的錯誤。添加路由到Rails 3控制器

我讀過這篇文章:How to add a custom RESTful route to a Rails app?有很多很好的信息(對於Rails 2,我使用Rails 3),但我似乎無法讓我的代碼工作。下面是我在哪裏:

我已經附加我的routes.rb如下:

resources :proposals do 
    member do 
     put :change_status 
    end 
    end 

我已經附加我proposals_controller.rb如下:

def change_status 
    @proposal = Proposal.find(params[:id]) 

    respond_to do |format| 
     if @proposal.change_status 
     format.html { redirect_to(@proposal, :notice => 'Proposal status was changed.'') } 
     format.xml { head :ok } 
     else 
     format.html { redirect_to(@proposal, :error => 'Proposal failed to transition.') } 
     format.xml { render :xml => @proposal.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

最後,在我的查看,我正在訪問它如下:

<%= link_to "Deliver to Client", change_status_proposal_path(@proposal) %> 

但是,當我訪問我的網站時,通過去

http://localhost:3000/proposals/4/change_status 

我得到以下錯誤:

路由錯誤

沒有路由匹配 「/提議/ 4/change_status」

我認爲我在做一些愚蠢的事在這裏,因爲這應該是非常基本的,但我似乎無法超越它。我很抱歉提出這樣一個基本問題,但如果有人有任何建議,這將是一個巨大的幫助。

在此先感謝!

回答

2

這是因爲我們使用了put作爲路由中的動詞。因此,鏈接必須是這樣的:

<%= link_to "Deliver to Client", change_status_proposal_path(@proposal), :method=>:put %> 

您將無法通過只把網址到瀏覽器訪問這條路,因爲請求需要予以公佈。將網址放入瀏覽器會算作GET。

+0

啊,謝謝你的澄清。我仍然試圖在Rails使用它時獲得PUT和GET之間的區別。在我想要做的事情中,GET是否合適?我在技術上影響與這個動作,我走上意思是我應該使用PUT對象上的變化,但我可能已經明白它是錯誤的。再次感謝您的幫助! – 2011-03-02 14:48:47

+0

是的,我會說PUT是合適的!你絕對是在正確的軌道上:GET來檢索,POST創建,PUT來改變和刪除東西。 – Wukerplank 2011-03-02 14:51:50

+0

謝謝,我想我現在已經明白了! – 2011-03-02 14:53:49