2015-08-15 72 views
0

我正在編寫一個博客,它有兩種類型的文章:「草稿」和「發佈」。我正在使用aasm寶石來使文章從草稿過渡到已發佈或已發佈。還有三種類型的用戶:「普通讀者」,「編輯」和「管理員」。沒有路線匹配[PUT],但我在routes.rb中包含「資源」

當用戶撰寫文章時,管理員可以評估是否發佈它們。爲了實現這一點,管理員有一個觀點,他們可以看到草稿和發表的文章。

的問題是,當我嘗試發佈的文章中,我得到沒有路由匹配[PUT]「/篇」錯誤,無論我在routes.rb添加resources :articles

我寫的代碼如下:

的routes.rb

resources :categories 
resources :articles do 
    resources :comments, only: [:create, :update, :destroy, :show] 
end 
devise_for :users 
root 'welcome#index' 
get '/dashboard', to: 'welcome#dashboard' 
put '/articles/:id/publish', to: 'articles#publish' 

articles_controller.rb

... 
def publish 
    @article.publish! # Article transition from draft to published. 
    redirect_to @article 
end 
... 

dashboard.html.erb

... 
<% @articles.each do |art| %> 
<h1><%= link_to art.title, art, method: :get %> | id = <%= art.id %> | user_id = <%= art.user_id %></h1> 
<div> 
    <%= art.body %> - <%= link_to "Eliminar", art, method: :delete %> 
    <% if art.may_publish? %> 
     - <%= link_to "Publicar", '/articles/#{article.id}/publish' , method: :put %> 
    <% end %> 
</div> 
<% end %> 
... 

我看不到爲什麼我得到這個錯誤,如果我包括文章資源。如果你需要我包含更多的代碼,請不要猶豫,問我。

謝謝先進。

+0

$ rake路線告訴你什麼?你也許可以在你的'resources:articles'塊中做'member do:publish end'。 – rdnewman

回答

3

您應該刪除您的自定義路線,並把它轉化爲資源:文章是這樣的: 的routes.rb

resources :articles do 
    put 'publish', on: :member 
    resources :comments, only: [:create, :update, :destroy, :show] 
end 

,你應該在你的視圖使用:

<%= button_to "Publicar", publish_article_path(article), method: :put %> 

它會生成表單。

0

該代碼似乎是正確的,所以嘗試重置服務器,順便說一句,重新啓動瀏覽器。它通常可以解決像這樣的奇怪問題:)讓我知道它是否工作。

相關問題