2013-07-22 178 views
1

在學習Rails 4時,我試圖將類別添加到簡單博客的帖子時停滯不前。我生成了模型,運行遷移並添加了一個控制器。無論我現在在創建類別時做什麼,我都會遇到同樣的錯誤:沒有路由匹配[POST],這很奇怪,因爲我似乎擁有所有的代碼。請幫忙!Rails 4路由錯誤 - 沒有路由匹配[POST]「/ categories/new」

類別控制器

class CategoriesController < ApplicationController 

    def index 
     @categories = Category.all 
    end 

    def new 
     @category = Category.new 
    end 

    def create 
     @category = Category.new(category_params) 

     @category.save 
     redirect_to new_category_path, alert: "Category created!" 
    end 

    def show 
     @category = Category.find(params[:id]) 
    end 

    def destroy 
     @category = Category.find(params[:id]) 
     @category.destroy 

     redirect_to categories_path 
    end 


    private 
     def category_params 
      params.require(:category).permit(:name) 
     end 

end 

的routes.rb

Blog::Application.routes.draw do 
    get 'tags/:tag', to: 'posts#index', as: :tag 

    resources :categories 

    resources :posts do 
    resources :comments 
    end 

    root 'welcome#index' 
end 

category.rb

class Category < ActiveRecord::Base 
    validates :name, presence: true 
    has_many :posts 
end 

new.html.erb

<%= form_for :category do |f| %> 
    <p> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %> 
    </p> 

    <p> 
    <%= f.submit %> 
    </p> 
<% end %> 

/分類/新

No route matches [POST] "/categories/new" 
+0

你可以添加整個回溯? –

回答

2

你應該在你看來

<%= form_for @category do |f| %> 
    <p> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %> 
    </p> 

    <p> 
    <%= f.submit %> 
    </p> 
<% end %> 

@category對象由form_for方法找出形式的URL。

如果您只傳遞Symbolform_for方法,而沒有明確指定url,則會生成表單,其中url是當前網址。

+0

令人驚歎。謝謝。在他們使用的begginer教程中:表單中的符號。 http://guides.rubyonrails.org/getting_started.html你能不能解釋爲什麼? –

+0

@DenisGrammakov我更新了我的答案。 –

1

儘管@category有效,但如果您進一步閱讀了一會兒,您會看到他們將解釋您的代碼爲什麼發送No route matches [POST] "/categories/new"

該指南實際上解釋說您需要指定url: posts_path表單以使用正確的路線。

雖然這個表單有一個問題。如果您檢查生成的HTML ,通過查看頁面的源代碼,您將看到 表單的action屬性指向/ posts/new。此 是一個問題,因爲此路徑轉到您目前正在登錄 的頁面,並且該路線只能用於顯示新帖子的 表單。

表單需要使用不同的URL才能去其他地方。 這可以通過form_for的url選項來完成。 通常在Rails中,用於這樣的新表單提交 的動作稱爲「創建」,因此表單應該指向 那個動作。

編輯app /人次/職位/ new.html.erb內的form_for線看 這樣的:

<%= form_for :post, url: posts_path do |f| %> 

在這個例子中, posts_path助手被傳遞到:url選項。什麼Rails將這樣做 這是它將指向該形式的電流控制器,郵政控制器 的創建操作,並將發送POST請求 該路線。

+0

謝謝你們。我想太多的信息壓倒了我的大腦能力。 –

相關問題