Относительно новичок в 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="✓" /><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?
самая странная часть - Комментарии работают нормально, и, насколько я могу судить, код для обоих ресурсов одинаков.