0

_applicant.html.erb のリンクは、ブラウザーでは次のようhttp://localhost:3000/needs/3/applicants.1 に表示されます。これをクリックすると、ブラウザーに次のように表示されます。

Routing Error

No route matches [PUT] "/needs/3/applicants.1"

この特定の申請者行の承認列を更新したい。基本的には、申請者コントローラの更新メソッドにデータを送信したいです。これを行うためにコードを変更するにはどうすればよいですか?

_applicant.html.erb

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

rake ルートを実行してこれを取得しました:

PUT    /needs/:need_id/applicants/:id(.:format)      applicants#update

ルート.rb:

resources :needs, except: [:new] do
 resources :applicants
end

申請者_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
4

1 に答える 1

1

ここには2つの可能な修正があると思います:

初め、

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(applicant.need_id, applicant.id)

次のように 2 つのインスタンス オブジェクトを渡すことができます。

need_applicants_path(Need.find(applicant.need_id), applicant)

次に、別の解決策として、ルートに PUT パスを明示的に設定する方法があります。

config/routes.rb に次の行を追加します

put 'need/:need_id/applicant/:id/update

次に実行します

rake routes

PUTパスが何であるかを確認します

于 2013-06-18T04:09:01.997 に答える