link_to update для вложенного ресурса не работает

Ссылка в _applicant.html.erb выглядит в браузере так: http://localhost:3000/needs/3/applicants.1 и при нажатии на нее появляется в браузере:

Routing Error

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

Я хочу, чтобы он обновил столбец принятия для этой конкретной строки кандидата. В основном я хочу, чтобы он отправлял данные в метод обновления контроллера заявителей. Как я могу изменить код, чтобы сделать это?

_заявитель.html.erb

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

получил это от запуска рейк-маршрутов:

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

person Pavan Katepalli    schedule 17.06.2013    source источник


Ответы (1)


Я думаю, что здесь есть два возможных решения:

Первый,

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)

Вы можете попробовать передать два объекта экземпляра следующим образом:

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

Во-вторых, другое возможное решение — явно указать путь PUT в ваших маршрутах.

В вашем config/routes.rb добавьте строку

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

затем беги

rake routes

и посмотреть, что такое путь PUT

person Richard Kuo    schedule 18.06.2013
comment
Эй, спасибо, Рич. В итоге я сделал это, и все заработало: ‹%= link_to 'Принять кандидата', need_applicant_path(:need_id =› претендент.need_id, :applicant_id =› претендент.id, :applicant =› {:accepted =› true}) , :method =› :put, :action =› обновить %› - person Pavan Katepalli; 19.06.2013