2011-02-11 4 views
0

사용자가 해당 페이지의 데이터를 수정할 수있는 페이지를 만들고 싶습니다. 그래서 ajax 호출을 사용하여 원래 데이터 테이블 행을 양식으로 대체하려고했습니다. 새 양식을 만들고 현재 내 코드로 행을 바꿀 수 있습니다. 그러나 해당 형식의 데이터를 편집하고 '업데이트'를 클릭하면 아무 일도 일어나지 않습니다. 내 콘솔에서 다음과 같은 내용을 보여줍니다.ajax로 작성된 레일 3

ActionController::RoutingError (No route matches "/projects/5"): 

왜 작동하지 않는지 알 수 없습니다.

코드는로 표시되는 다음

index.html.erb

<tr> 
    <th>Name</th> 
    <th></th> 
    <th></th> 
</tr> 

<% @projects.each do |project| %> 
    <tr id="project_<%= project.id %>"> 
    <td><%= link_to project.name, project %></td> 
    <td><%= link_to 'Edit', edit_project_path(project), :method => :get, :remote => true %></td> 
    <td><%= link_to 'Destroy', project, :confirm => 'Are you sure?', :method => :delete , :remote => true %></td> 
    </tr> 
<% end %> 

edit.js.erb

$('#project_<%= @project.id%>').replaceWith("<%= escape_javascript(render :partial=>'edit') %>"); 

_edit.html.erb

<tr id="project_<%= @project.id%>"> 
    <%= form_for(@project, :remote => true) do |f| %> 
    <%= form_authenticity_token %> 
    <td><%= f.text_field :name %></td> 
    <td><%= f.submit 'Update' %></td> 
    <td><%= link_to 'Destroy', @project, :confirm => 'Are you sure?', :method => :delete , :remote => true %></td> 
    <% end %> 
</tr> 

답변

0

라우팅 오류는 일반적으로 카우 (cau)입니다. 다음 중 하나에 의해 sed :

  1. routes.rb에 지정된 경로가 없습니다. 명령 줄에서 "rake routes"를 실행하고 "/ projects/: id"와 같은 것이 있는지보십시오. 그렇지 않은 경우 프로젝트 자원을 추가하거나 수동으로 경로를 지정하여 경로를 추가해야합니다. HTTP 메소드가 routes.rb에 지정된 HTTP verb와 일치하는지 확인하십시오.

  2. ProjectsController라는 컨트롤러가 없거나 아약스 메서드가 게시중인 경우 (또는 아약스 메서드가 게시중인 경우) 또는 업데이트 메서드가없는 경우 (해당 퍼팅 인 경우) 컨트롤러가 없습니다.

+0

경로가 있지만 네, PUT입니다. ajax를 사용하지 않고 index.html.erb에 동일한 코드를 생성하기 위해 동일한 템플릿 인 _edit.html.erb를 사용했습니다. 모든 것이 효과가있었습니다. 생성 된 코드 아약스가 튀어 나왔습니다. 그것은 숨겨진 입력 데이터 _method = put을 가졌습니다. 아약스 삽입 코드가 페이지로드시 바인드해야하는 일부 js 함수를 바인드하지 않았습니까? 어떻게 수정해야합니까? – Shenk