2016-11-17 40 views
1

我使用contact_us宝石版本0.5.4Rails 4.0.x如何将contact_us gem的root动作路由到指定的动作?

我下面的代码在我的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

发现我已经升级,从3.2.19轨道版本4.0.13和红宝石以2.0.0p481

老代码工作正常使用Rails 3.2.19和1.8.7红宝石

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

如果我只用get在上面的代码抛出这个错误更改match

/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创建的路线如下解释:

回答

3

在路由添加:as做的工作

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

如聊天CONTACT_US模块鉴定Albinroute file它已经拥有相同的路线,但用不同的别名

get "contact-us" => "contact_us/contacts#new", as: :contact_us #line#11 

我只是添加了不同路径和不同别名的相同路由,

3

你可以做同样的方式像你一样在Rails 3.2你只需要到match交换到get。不再允许匹配任何动词。

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

编辑

我们在聊天解决了这个。事实证明,这是与宝石​​的碰撞。

+0

是的,我做到了,但它抛出了另一个错误,请检查问题更新 –

+0

这是如此奇怪。我开始了一个新的小测试项目。它工作顺利... – Albin

+0

是你的整个路线文件? – Albin

2

试试这个

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

root :to => 'contact_us#new' 
# or without root 
match 'contact_us' => 'contact_us#new', via: [:get] 
+0

请检查更新问题 –

+0

@ riksof-zeeshan:您是否尝试过以上代码? –

+0

是的,我做了'match'contact_us'=>'contact_us#new',通过:[:get]'并且它抛出这个错误无效的路由名称,已经在使用:'contact_us' –

相关问题