2013-08-04 112 views
0

我正在rails中創建博客應用程序。我有一個創建和更新博客的通用形式。Rails:沒有路由匹配[PUT]「/ blog/2」

這是視圖編輯和new.html.erb的

<%= render :partial => "form"%> 

這是鑑於_form.html.erb的博客:

 <%= form_for @blog do |f| %> 
     <%= f.text_field :title, :placeholder => "Title" %><br> 
     <%= f.cktext_area :article, :placeholder => "Content", :ckeditor => {:toolbar => "MyToolbar"} %> 
     <%= f.submit %> 
     <% end %> 

我的博客是成功創建,但我得到的錯誤在更新行動。這是我在博客控制器編輯和更新操作:

def edit 
    @blog = Blog.find_by_slug(params[:id]) 
end 
def update 
    @blog = Blog.find(params[:id]) || not_found 
    @blog.update_attributes(params[:blog]) 
    redirect_to "/blogs/#{@blog.slug}" 
end 

當我打開從編輯視圖的形式,並點擊更新按鈕,它會引發錯誤:

No route matches [PUT] "/blog/2" 

我的routes.rb是:

resources :blogs 
get 'blog', to: 'blogs#index' 
get '/blog/:id', to: 'blogs#show', as: 'blog' 

我沒有得到它是怎麼了。我試圖在form_for中添加「url:blogs_path」,它刪除錯誤但不保存編輯更改。

任何人可以幫助我在哪裏,我錯了嗎?

謝謝。

+2

發表您的routes.rb文件 – aromero

+1

我建議你閱讀[入門使用Rails指南(http://guides.rubyonrails.org/getting_started.html)。看起來有一些基本原則(比如路由)你還不明白。 –

+0

檢查您是否有「PUT /博客/:ID =>博客#更新」的路線,當你運行'在控制檯 –

回答

0

好的。我不明白你爲什麼要違背慣例。無論如何,使用form_for resource會自動生成操作URL作爲PUT到/resources/:id(如果其更新操作)。

所以要重寫這個,你需要做兩件事。

  1. 更新你的路由來支持這一點:

此行添加到你的路由文件:

put 'blog/:id' => 'blogs#update', :as => 'update_blog'

,你把這個線上方的資源是非常重要的:博客`電話。

2。指明該表格應提交網址:

您需要創建表單標籤是這樣的:

<%= form_for @blog, :url => update_blog_path(@blog) do |f| %>

試試這個,讓我們知道。

+1

嘿,它正在爲更新行動工作,但由於我有編輯和新的常見形式,表單無法創建新的博客。它會在創建新博客時給出錯誤「無路由匹配{:controller =>」blogs「,:action =>」update「...」。它的形式更新url路徑的原因。 – user2206724

+0

違背DRY原則併爲New創建單獨的表單。 –

+0

哦,這是唯一的方法?哦,會做到的。感謝您的解決方案:-) – user2206724

相關問題