2013-12-15 38 views
1

我在做2個表單,1個用於創建,1個用於編輯。創建表單的效果很好。編輯表格產生這個錯誤Routes.rb編輯表單重定向失敗

No route matches [PATCH] "/admin/posts/14/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

那麼爲什麼你爲'create'和'edit'創建單獨的表單? – Reboot

+0

,因爲我不能找出一個形式的網址,jajaja我肯定我無法弄清楚。 jaja,但我會,我promess –

+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| %> 

你也可以簡化這個到:

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

這將自動設置表單動作爲PUT admin/posts/:id現有記錄,並POST admin/posts新記錄。

+0

感謝我使用rails 3.2 –

+0

實際上,我認爲我用於編輯的課程是用於rails 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?方法,Rails可以確定選擇哪條路徑。如果對象是new_record,則導軌將使用admin/posts#create方法,但如果對象不是new_record,則導軌將使用admin/posts#update方法。所以,你的控制器看起來會像這樣

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這樣

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

現在Rails可以自動確定爲new崗位和editing後使用的路徑

+0

哇,我真的會嘗試這個,一個問題..在形式上,他們實際上是相同的形式?哇,多數民衆贊成酷,但如何創建一個「編輯」鏈接在每個如果我沒有編輯..和新的不指向編號 –

+0

你用這種方法你不需要兩種形式 – Reboot

+0

對不起,也許你沒有看到我的編輯評論。 「多數民衆贊成酷,但我如何創建一個」編輯「鏈接爲每個職位,如果我沒有編輯..和新的沒有指向一個ID」 –