2014-04-01 72 views
0

我嘗試製作一個new -action,它給了用戶一個表單和一個create -action來處理它失敗並顯示錯誤消息`。控制器/操作未找到,但實際存在?

檢視:應用/視圖/工作室/ new.html.erb:

<%= form_for @studio, url: {action: 'create'} do |f| %> 
    <%= f.text_field :name %> 
    <%= f.submit 'Create' %> 
<% end %> 


控制器:應用程序/控制器/ studio_controller.rb:

def new 
    @studio = Studio.new 

    respond_to do |format| 
    format.html 
    format.json { render json: @studio } 
    end 
end 

def create 
    # TODO 
end 


路線:的config/routes.rb中

get 'studios/new' => 'studios#new', :as => 'new_studio' 


在試圖訪問http://localhost:3000/studios/new,我提出與錯誤

No route matches {:action=>"create", :controller=>"studios"} 

正如你所看到的,create -action出現在studios - 控制器。爲什麼失敗?

回答

3

這是失敗的,因爲您沒有爲create操作定義路由。您只爲new操作定義了get操作。

更新你的路由文件到post路由添加到create行動:

post 'studios/create' => 'studios#create' 

或者,您可以選擇使用足智多謀的路由和更新你的路由文件如:

resources :studios, only: [ :new, :create ] 

這將爲您的studio資源定義newcreate路線。要查看生成的路線,您可以運行rake routes

+0

真的,控制器本身是不知道自己的路線?在PHP Symphony中,您可以引用操作而無需在路由中聲明它們。這在Rails中不可行嗎? – krystah

0

如果實例變量爲@studio,rails形式助手會通過new操作請求實例變量,並且在單擊保存時調用create操作來驗證並保存此新實例。它失敗了,因爲rails找不到提交對象的操作。

嘗試config/routes.rb(指數,新,創建,顯示,編輯,更新,銷燬了)自動路由到具有相同名稱的行爲在app/controllers/studio_controller.rb

嘗試訪問這裏的形式傭工的文檔添加resources :studios REST風格的路線:http://guides.rubyonrails.org/form_helpers.html#binding-a-form-to-an-object作更深入的解釋。

相關問題