Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom POST routes for create action not fired up

# Explaining the context

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! :)" 

# The Problem

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." 

# config/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 

I hope this problem is in the way I created the route. I tried many different things.

# _form.html.erb

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

I am using standard form_for helper.

# Rake Routes for Forums

$ 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 

We clearly see a route for POST /helpcenter which is binded to the create action of the forums controller.

# Logs

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"} 

The logs clearly shows I am doing a POST on /helpcenter but that it fires up the index action instead of the create action!

# What am I doing wrong?

puts "Thanks!" 
like image 538
roychri Avatar asked Jul 02 '12 16:07

roychri


2 Answers

I think the request matches your first forums route since you didn't specify a HTTP method. This should work:

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

Or the shorthand version:

get "/helpcenter" => "forums#index", :as => :forums post "/helpcenter" => "forums#create", :as => :create_forum 
like image 78
Stefan Avatar answered Sep 22 '22 19:09

Stefan


First glance shows that a POST against /helpcenter passes the rule for the forums#index match, which is encountered first, so that's what you get

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

What about:

match "/helpcenter" => "forums#index", :via => :get, :as => :forums match "/helpcenter" => "forums#create", :via => :post, :as => :create_forum 
like image 30
railsdog Avatar answered Sep 20 '22 19:09

railsdog