添加路由到Rails 3控制器

时间:2011-03-02 14:33:33

标签: ruby-on-rails-3 routing

我仍然掌握着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”

我认为我在这里做了一些愚蠢的事情,因为这应该是非常基本的,但我似乎无法克服它。我为提出这样一个基本问题而道歉,但如果有人有任何建议,那将是一个巨大的帮助。

提前致谢!

1 个答案:

答案 0 :(得分:2)

这是因为您在路线中使用了put作为动词。所以链接必须如下所示:

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

只需将网址放入浏览器,您就无法访问此路由,因为请求需要进行POST。将URL放入浏览器计为GET。