Put 链接\u以更新嵌套资源不工作

Put 链接\u以更新嵌套资源不工作,put,link-to,nested-resources,Put,Link To,Nested Resources,_applicator.html.erb中的链接在浏览器中如下所示:http://localhost:3000/needs/3/applicants.1 单击此按钮后,浏览器中将显示: Routing Error No route matches [PUT] "/needs/3/applicants.1" 我希望它更新此特定申请人行的“接受”列。基本上,我希望它将数据发送到应用程序控制器的更新方法。如何修改代码以实现此目的 _applicator.html.erb <%= link_t

_applicator.html.erb中的链接在浏览器中如下所示:
http://localhost:3000/needs/3/applicants.1
单击此按钮后,浏览器中将显示:

Routing Error

No route matches [PUT] "/needs/3/applicants.1"
我希望它更新此特定申请人行的“接受”列。基本上,我希望它将数据发送到应用程序控制器的更新方法。如何修改代码以实现此目的

_applicator.html.erb

<%= link_to 'Accept Applicant', need_applicants_path(applicant.need_id, applicant.id), :method => :put, :action => "update", :applicant => {:acceptance => true} %>
routes.rb:

resources :needs, except: [:new] do
 resources :applicants
end
申请人(u controller.rb)

class ApplicantsController < ApplicationController

  def update
    @need = Need.find(params[:need_id])
    @applicant = @need.applicants.find(params[:id])

    if @applicant.update_attributes(params[:applicant])
      flash[:success] = 'Your applicant has been accepted/rejected!'
      redirect_to @need
    else
        @need = Need.find(params[:need_id])
      render 'needs/show'
    end

  end


end
类应用程序控制器
我认为这里有两种可能的修复方法:

首先,

http://localhost:3000/needs/3/applicants.1
应该读一下

http://localhost:3000/needs/3/applicants/1
错误在这一行:

<%= link_to 'Accept Applicant', need_applicants_path(applicant.need_id, applicant.id), :method => :put, :action => "update", :applicant => {:acceptance => true} %>
您可以尝试传入两个实例对象,如下所示:

need_applicants_path(Need.find(applicant.need_id), applicant)
其次,另一种可能的解决方案是在路由中显式设置PUT路径

在config/routes.rb中添加行

put 'need/:need_id/applicant/:id/update
然后跑

rake routes

然后看看PUT路径是什么

嘿,谢谢Rich。最后我做了这个,它开始工作了:applicator.need_id,:applicator_id=>applicator.id,:applicator=>{:accepted=>true}),:method=>:put,:action=>“update”%>
put 'need/:need_id/applicant/:id/update
rake routes