Неглубокие вложенные маршруты все еще ищут идентификатор родителя - PullRequest
0 голосов
/ 25 июня 2011

Относительно новичок в Ruby on Rails, но я думаю, что у меня есть основы. Я столкнулся с одной проблемой, хотя я просто не могу понять и не знаю, как отлаживать.

У меня пологие маршруты:

resources :incident_reports, :shallow => true do
    get :thanks, :on => :collection
    get :monthly_totals, :on => :collection
    post :monthly_totals_download, :on => :collection
    resources :supervisory_reviews, :comments
  end

И маршруты рейка показывают, что я ожидаю:

incident_report_supervisory_reviews GET    /incident_reports/:incident_report_id/supervisory_reviews(.:format)     {:action=>"index", :controller=>"supervisory_reviews"}
                                         POST   /incident_reports/:incident_report_id/supervisory_reviews(.:format)     {:action=>"create", :controller=>"supervisory_reviews"}
  new_incident_report_supervisory_review GET    /incident_reports/:incident_report_id/supervisory_reviews/new(.:format) {:action=>"new", :controller=>"supervisory_reviews"}
                 edit_supervisory_review GET    /supervisory_reviews/:id/edit(.:format)                                 {:action=>"edit", :controller=>"supervisory_reviews"}
                      supervisory_review GET    /supervisory_reviews/:id(.:format)                                      {:action=>"show", :controller=>"supervisory_reviews"}
                                         PUT    /supervisory_reviews/:id(.:format)                                      {:action=>"update", :controller=>"supervisory_reviews"}
                                         DELETE /supervisory_reviews/:id(.:format)                                      {:action=>"destroy", :controller=>"supervisory_reviews"}
                incident_report_comments GET    /incident_reports/:incident_report_id/comments(.:format)                {:action=>"index", :controller=>"comments"}
                                         POST   /incident_reports/:incident_report_id/comments(.:format)                {:action=>"create", :controller=>"comments"}
             new_incident_report_comment GET    /incident_reports/:incident_report_id/comments/new(.:format)            {:action=>"new", :controller=>"comments"}
                            edit_comment GET    /comments/:id/edit(.:format)                                            {:action=>"edit", :controller=>"comments"}
                                 comment GET    /comments/:id(.:format)                                                 {:action=>"show", :controller=>"comments"}
                                         PUT    /comments/:id(.:format)                                                 {:action=>"update", :controller=>"comments"}
                                         DELETE /comments/:id(.:format)                                                 {:action=>"destroy", :controller=>"comments"}

У меня есть show and update и все остальное, определенное в supervisory_reviews_controller

def update
    @supervisory_review = SupervisoryReview.find(params[:id])

    respond_to do |format|
      if @supervisory_review.update_attributes(params[:supervisory_review])
        format.html { redirect_to(@supervisory_review.incident_report, :notice => 'Supervisory review was successfully updated.') }
        format.xml  { head :ok }
      else
        format.html { redirect_to(@supervisory_review.incident_report, :notice => 'An error occurred.') }
        format.xml  { render :xml => @supervisory_review.errors, :status => :unprocessable_entity }
      end
    end
  end

но когда я пытаюсь показать, обновить или удалить контрольный отзыв (пример формы)

<form accept-charset="UTF-8" action="/supervisory_reviews/1047" class="edit_supervisory_review" id="edit_supervisory_review_1047" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="_method" type="hidden" value="put" /><input name="authenticity_token" type="hidden" value="ii8Xhygfcr71icNZfljlEkQItpV1+zFKaEn6ZZdYjiE=" />

(выглядит правильно, верно?)

я получаю "Страница, которую вы искали, не существует"

и в журнале написано:

Началось POST "/ supervisory_reviews / 1047" для 10.1.5.24 в пт 24 июня 17:14:21 -0 400 2011 Обработка SupervisoryReviewsController # обновить как Параметры HTML: { "Authenticity_token" => "ii8Xhygfcr71icNZfljlEkQItpV1 + zFKaEn6ZZdYji E = "," utf8 "=>" âo "", "id" => "1047", "Supervisory_review" => { "inappropriate_reason" =

"", "advocacy_next_steps" => "", "resolution" => "", "comments" => "gfhsdfgsdfg", "ha ndling_of_incident "=>"», "Рекомендация" => "dfsgdfggdfsd", "need_for_advocacy" = "ложь", "инцидент_решено" => "правда", "инцидент_ручка_приобретено" => "правда"} } Завершено за 2 мс

ActiveRecord :: RecordNotFound (Не удалось найти IncidentReport без идентификатора):
Библиотека / role_requirement_system.rb: 121: в check_roles'<br> lib/role_requirement_system.rb:121:in check_roles'

так почему он ищет IncidentReport?

самая странная часть - Комментарии работают нормально, и, насколько я могу судить, код для обоих ресурсов одинаков.

1 Ответ

0 голосов
/ 25 июня 2011

Проблема не в маршрутах, а в строке lib / role_requirement_system.rb 121. Возможно, этому коду необходим IncidentReport для предоставления авторизации. Отправьте код из этой библиотеки, если вам нужна дополнительная помощь.

...