我仍然掌握着Rails,我遇到了一个我觉得应该很容易的问题。希望有人能告诉我我的方式错误。
我通读了另一篇文章: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
我收到以下错误:
路由错误
没有路线匹配“/ proposals / 4 / change_status”
我认为我在这里做了一些愚蠢的事情,因为这应该是非常基本的,但我似乎无法克服它。我为提出这样一个基本问题而道歉,但如果有人有任何建议,那将是一个巨大的帮助。
提前致谢!
答案 0 :(得分:2)
这是因为您在路线中使用了put
作为动词。所以链接必须如下所示:
<%= link_to "Deliver to Client", change_status_proposal_path(@proposal), :method=>:put %>
只需将网址放入浏览器,您就无法访问此路由,因为请求需要进行POST。将URL放入浏览器计为GET。