27

#コンテキストの説明

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

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

この問題が私がルートを作成した方法にあることを願っています。いろいろ試してみました。

#_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/helpcenterのルートがはっきりとわかります。

#ログ

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

ログには、/ helpcenterでPOSTを実行していることが明確に示されていますが、作成アクションではなくインデックスアクションが起動されます。

#私は何が間違っているのですか?

puts "Thanks!"
4

2 に答える 2

33

forumsHTTP メソッドを指定していないため、リクエストは最初のルートと一致すると思います。これはうまくいくはずです:

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
于 2012-07-02T16:42:10.713 に答える
2

一見すると、/helpcenter に対する POST が最初に検出された forums#index 一致のルールに合格することがわかります。

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
于 2012-07-02T16:47:27.380 に答える