2013-12-15 1 views
1

2 개의 양식을 만들고 있는데 1 개는 작성 용이고 1 개는 편집 용입니다. 양식 작성은 훌륭합니다. 편집 폼에서이 오류가 발생합니다.Routes.rb 편집 양식 리디렉션이 실패했습니다.

No route matches [PATCH] "/admin/posts/14/edit" 

양식에 문제가 "패치"라고 생각됩니다. 나는 "편집"폼과 같이 "edit"와 url admin_posts_path를 변경했다. 그러나 이것은 현재 아이템을 편집하는 것이 아니라 새로운 아이템을 생성한다. 이이 부분

   admin_posts GET /admin/posts(.:format)   admin/posts#index 
         POST /admin/posts(.:format)   admin/posts#create 
      new_admin_post GET /admin/posts/new(.:format)  admin/posts#new 
     edit_admin_post GET /admin/posts/:id/edit(.:format) admin/posts#edit 
       admin_post GET /admin/posts/:id(.:format)  admin/posts#show 
         PUT /admin/posts/:id(.:format)  admin/posts#update 
         DELETE /admin/posts/:id(.:format) 

내 레이크 노선이며,이 형태 또는 적어도 중요한 부분

<%= form_for :post, url: edit_admin_post_path(@post),:html => { :multipart => true }, method: :patch do |f| %> 
+0

그래서 new 포스트와 editing 포스트에 사용할 경로를 확인할 수 있습니다 레일 'create'와'edit'를위한 별도의 폼을 만드는 겁니까? – Reboot

+0

왜냐하면 나는 폼에 대한 URL을 알아낼 수 없기 때문에 jajaja 메신저를 이해할 수 없다. jaja,하지만 나는 대답을 약속한다. –

+0

아래 나의 해결책을 확인해 보라. 단일 형태의 문제를 해결할 수 있을지도 모른다. – Reboot

답변

1

edit 행위는 GET 요청에 응답합니다. 실제 업데이트는 update 액션에서 수행되며 PUT (또는 Rails 4를 사용하는 경우 PATCH)에 응답합니다.

귀하의 편집 양식이 시작해야합니다 :

<%= form_for :post, url: admin_post_path(@post),:html => { :multipart => true }, method: :put do |f| %> 
또한이를 단순화 할 수

: 이것은 자동으로 기존 기록을 위해 PUT admin/posts/:id에 양식 동작을 설정합니다

<%= form_for @post, html: { multipart: true } do |f| %> 

, 새로운에 대한 POST admin/posts 기록.

+0

고마워 레일을 사용하여 3.2 –

+0

실제로 제가 편집을 위해 사용하고있는 교훈은 레일 4에 대한 것입니다, 컨트롤러에는 또한 현재 허가가있는 라인이 있습니다 "정의되지 않은 메소드'permit '"(그건 레일 4) 맞지? –

+0

Rails 3.2에 익숙하지 않다면 4로 업그레이드 할 수 있습니다.그렇지 않다면, 여기에 설명 된 것처럼 모델에서'attr_accessible'을 사용할 필요가 있습니다 : http://apidock.com/rails/ActiveRecord/Base/attr_accessible/class – fivedigit

1

edit_admin_post에만 GET HTTP의 동사입니다.

게시물을 업데이트하려면 양식이 PUT /admin/posts/:id을 참조해야합니다.

는 귀하의 양식을 변경

:

<%= form_for @post, { multipart: true } do |f| %> 

<% end %> 
+0

그래서 어떻게 수정합니까, 아니면 어떻게 변경합니까 (게시물을 가져올 때)? –

+1

양식을 <% = form_for @post do | f | %> <% end %> – SergeyKutsko

1

create 작업이 작동하는 경우 편집을 위해 url을 전달할 필요가 없습니다. 레일스는 new_record? 메서드를 호출하여 선택할 경로를 결정할 수 있습니다. 객체가 new_record 인 경우 레일은 admin/posts#create 메서드를 사용하지만 객체가 new_record이 아닌 경우메서드를 사용합니다. 그래서 컨트롤러는이

class Admin::PostsController < ApplicationController 
    def new 
    @post = Post.new 
    end 

    def create 
    //some code 
    end 

    def edit 
    @post = Post.find(params[:id]) 
    end 

    def update 
    //some code 
    end 
end 

모양을하고이

form_for @post do |f| 
    //code here 
end 

같은 form을 만들 수있는 것보다 자동으로 왜

+0

와우, 나는 이것을 정말로 하나의 질문으로 생각할 것입니다 ... 형태로, 그들은 실제로 같은 형태입니까? 와우 그게 멋지지만 편집을하지 않으면 각각의 "편집"링크를 어떻게 만듭니 까? 그리고 새로운 것은 ID를 가리키고 있지 않다. –

+0

나중에이 방법을 사용하면 두 가지 양식이 필요 없다. – Reboot

+0

미안하지만 어쩌면 너는하지 말아라. 내 편집 내역을 참조하십시오. "그게 멋지지만 편집을하지 않으면 각 게시물에 대한"편집 "링크를 어떻게 만들 수 있습니까? 그리고 새로운 ID를 가리키고 있지 않습니다" –