1

contact_us gem バージョン 0.5.4を使用しています

routes.rb ファイルで次のコードを実行しました

resources :contacts, controller: 'contact_us', only: [:new, :create] do
  root :to => 'contact_us#new'
end

私の理解では、上記のルートはアクションcontactsのみをサポート:new:create、指定されたコントローラーcontroller: 'contact_us'ではルートでもアクション/にリダイレクトされますが、ブラウザーでhttp://localhost:3000/contact-usにアクセスすると、#new

不明なアクション
ContactUsController のアクション「インデックス」が見つかりませんでした

Rails のバージョンを 3.2.19 から 4.0.13 に、Ruby を 2.0.0p481 にアップグレードしました。

古いコードは Rails 3.2.19 と Ruby 1.8.7 で正常に動作していました

resources :contacts,
  :controller => 'contact_us',
  :only       => [:new, :create]
match 'contact_us' => 'contact_us#new'

上記のコードでのみ変更matchするとget、このエラーがスローされます

/home/vagrant/.rvm/gems/ruby-2.0.0-p481/gems/actionpack-4.0.13/lib/action_dispatch/routing/route_set.rb:430:in `add_route': 無効なルート名、すでに使用されています: 'contact_us' (ArgumentError)

オプションを使用して同じ名前の 2 つのルートを定義した:asか、同じ名前のリソースによって既に定義されているルートを上書きしている可能性があります。resources後者については、ここで説明されているように、作成されたルートを制限できます。

4

3 に答える 3

3

Rails 3.2 で行ったのと同じ方法で行うことができ、 を に交換するだけで済みmatchますget。動詞との一致は許可されなくなりました。

resources :contacts,
  :controller => 'contact_us',
  :only       => [:new, :create]
get 'contact_us' => 'contact_us#new'

編集

チャットでこれを解決しました。宝石contanct_usとの衝突であることが判明しました。

于 2016-11-17T13:00:35.910 に答える
1

これを試して

resources :contacts, controllers: 'contact_us', :only => [:new, :create]

root :to => 'contact_us#new'
# or without root 
match 'contact_us' => 'contact_us#new', via: [:get]
于 2016-11-17T13:19:15.120 に答える