Rails 4.0.x 如何将contact_us gem 的根动作路由到指定的动作?
Rails 4.0.x how to route the root action of contact_us gem to specified action?
我正在使用 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'
也支持 root /
它会重定向到 #new
操作,但是当我在浏览器中点击 http://localhost:3000/contact-us 时,它会显示
Unknown action
The action 'index' could not be found for 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': Invalid route name, already in use: 'contact_us'
(ArgumentError)
You may have defined two routes with the same name
using the :as
option, or you may be overriding a route already
defined by a resource with the same naming. For the latter, you can
restrict the routes created with resources
as explained here:
您可以像在 rails 3.2 中那样做,您只需要将 match
换成 get
。不再允许匹配任何动词。
resources :contacts,
:controller => 'contact_us',
:only => [:new, :create]
get 'contact_us' => 'contact_us#new'
编辑
我们在聊天中解决了这个问题。原来是和gemcontanct_us.
发生了碰撞
试试这个
resources :contacts, controllers: 'contact_us', :only => [:new, :create]
root :to => 'contact_us#new'
# or without root
match 'contact_us' => 'contact_us#new', via: [:get]
在路线中添加 :as
完成作业
resources :contacts,
:controller => 'contact_us',
:only => [:new, :create]
get 'contact_us' => 'contact_us#new', as: :contact_us2
由 Albin in the chat the contact_us modules route file 识别,它已经有相同的路线但别名不同
get "contact-us" => "contact_us/contacts#new", as: :contact_us #line#11
我只是添加了具有不同路径和不同别名的相同路由,
我正在使用 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'
也支持 root /
它会重定向到 #new
操作,但是当我在浏览器中点击 http://localhost:3000/contact-us 时,它会显示
Unknown action
The action 'index' could not be found for 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': Invalid route name, already in use: 'contact_us' (ArgumentError)
You may have defined two routes with the same name using the
:as
option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created withresources
as explained here:
您可以像在 rails 3.2 中那样做,您只需要将 match
换成 get
。不再允许匹配任何动词。
resources :contacts,
:controller => 'contact_us',
:only => [:new, :create]
get 'contact_us' => 'contact_us#new'
编辑
我们在聊天中解决了这个问题。原来是和gemcontanct_us.
发生了碰撞试试这个
resources :contacts, controllers: 'contact_us', :only => [:new, :create]
root :to => 'contact_us#new'
# or without root
match 'contact_us' => 'contact_us#new', via: [:get]
在路线中添加 :as
完成作业
resources :contacts,
:controller => 'contact_us',
:only => [:new, :create]
get 'contact_us' => 'contact_us#new', as: :contact_us2
由 Albin in the chat the contact_us modules route file 识别,它已经有相同的路线但别名不同
get "contact-us" => "contact_us/contacts#new", as: :contact_us #line#11
我只是添加了具有不同路径和不同别名的相同路由,