我正在使用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'
也支持根/
将重定向到#new
操作,但当我在浏览器中点击http://localhost:3000/contact-us时会显示
未知行动
行动指数'找不到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)
您可能已经定义了两个具有相同名称的路由 使用
:as
选项,或者您可能已经覆盖了路线 由具有相同命名的资源定义。对于后者,你可以 限制使用resources
创建的路线,如下所述:
答案 0 :(得分:3)
你可以像在rails 3.2中那样做,你只需要将match
交换为get
。不再允许匹配任何动词。
resources :contacts,
:controller => 'contact_us',
:only => [:new, :create]
get 'contact_us' => 'contact_us#new'
<强> 修改 强>
我们在聊天中解决了这个问题。事实证明这是与宝石contanct_us的碰撞。
答案 1 :(得分:3)
在路线中添加:as
执行作业
resources :contacts,
:controller => 'contact_us',
:only => [:new, :create]
get 'contact_us' => 'contact_us#new', as: :contact_us2
由Albin在聊天中确定,contact_us模块route file它已经有相同的路由但具有不同的别名
get "contact-us" => "contact_us/contacts#new", as: :contact_us #line#11
我刚添加了具有不同路径和不同别名的相同路由,
答案 2 :(得分: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]