2012-07-02 28 views
21

#解釋上下文

puts "I am learning Rails, building a simple forum application." 
puts "I am pretty satisfied to where I got so far but routes... " 
puts "...still figuring them out." 
puts "Been 2 days trying all sorts of things." 
puts "This is where I am now, and something is not working as expected." 
puts "Any help/pointers would be appreciated! :)" 

#的問題

puts "I want my forum's create path to be '/helpcenter' and not '/helpcenter/cat'." 
puts "When I access the form to create a new forum and I hit submit, " 
puts "the form post to '/helpcenter' correctly (firebuged)" 
puts "but I get the index, not the create!" 
puts "I even put debugger in my create action but it is not being called." 

#配置/ routes.rb中

scope "/helpcenter" do 
    resources :cat, :controller => "forums", :as => :forums do 
    resources :topics , :controller => "forum_topics", :as => :topics 
    resources :posts, :controller => "forum_posts", :as => :posts 
    end 
end 

match "/helpcenter" => "forums#index", :as => :forums 
match "/helpcenter" => "forums#create", :via => :post, :as => :create_forum 

我希望這個問題是我創建路線的方式。我嘗試了很多不同的東西。自定義POST路線創建行動不解僱了

#_form.html.erb

<%= form_for(@forum) do |f| %> 
.... 
<% end %> 

我使用標準的form_for幫手。

#耙路線的論壇

$ CONTROLLER=forums rake routes 
delete_forum GET /helpcenter/cat/:id/delete(.:format) forums#delete 
     forums GET /helpcenter/cat(.:format)   forums#index 
      POST /helpcenter/cat(.:format)   forums#create 
    new_forum GET /helpcenter/cat/new(.:format)  forums#new 
    edit_forum GET /helpcenter/cat/:id/edit(.:format) forums#edit 
     forum GET /helpcenter/cat/:id(.:format)  forums#show 
      PUT /helpcenter/cat/:id(.:format)  forums#update 
      DELETE /helpcenter/cat/:id(.:format)  forums#destroy 
     forums  /helpcenter(.:format)    forums#index 
create_forum POST /helpcenter(.:format)    forums#create 

我們清楚地看到了POST /幫助中心被綁定到論壇控制器的創建行動路線。

#日誌

Started POST "/helpcenter" for 127.0.0.1 at 2012-07-02 12:25:00 -0400 
Processing by ForumsController#index as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"d5iVKCh234234=", "forum"=>{"name"=>"", "description"=>""}, "commit"=>"Save Changes"} 

日誌清楚地表明我做的/幫助中心一個職位,但它會啓動這個指數的行動,而不是創建行動!

#我做錯了什麼?

puts "Thanks!" 

回答

26

由於您沒有指定HTTP方法,我認爲請求與您的第一個forums路由匹配。這應該工作:

match "/helpcenter" => "forums#index", :via => :get, :as => :forums 
match "/helpcenter" => "forums#create", :via => :post, :as => :create_forum 

或者簡寫版本:

get "/helpcenter" => "forums#index", :as => :forums 
post "/helpcenter" => "forums#create", :as => :create_forum 
2

第一眼表明反對/幫助中心一個POST通行證論壇#指數賽,這是第一次遇到的規則,所以這就是你

match "/helpcenter" => "forums#index", :as => :forums 
match "/helpcenter" => "forums#create", :via => :post, :as => :create_forum 

什麼:

match "/helpcenter" => "forums#index", :via => :get, :as => :forums 
match "/helpcenter" => "forums#create", :via => :post, :as => :create_forum