2011-08-22 122 views
0

所以我创建了一个名为路线类似如下:的Rails 3.0路由问题

match 'deactivate/:id' => 'events#deactivateEvent', :constraints => {:id => /\d+/}, :via => [:get, :post] 

在我看来,我有这行代码:

<%= link_to 'Deactivate', deactivate_path(@event.id) %> 

现在我得到以下错误: NoMethodError在活动#显示

显示C:/Users/redbush/Desktop/ticket/app/views/events/show.html.erb其中线#33提出:

未定义的方法`deactivate_path”为#<#:0x817f050>

提取的源(左右线#33):

30: <% end %> 
31: 
32: <% if @event.approval && [email protected] && @event.active && @event.sales_start < Time.now %> 
33: <%= link_to 'Deactivate', deactivate_path(@event.id) %> 
34: <% end %> 

所以我为什么这是行不通的真糊涂。

任何想法?

回答

2

既然你建立一个手动match路径,需要为它提供您想要使用的命名路线,使用:as参数:

match 'deactivate/:id' => 'events#deactivateEvent', 
     :constraints => {:id => /\d+/}, 
     :via => [:get, :post], 
     :as => :deactivate 

(见Rails Routing guide 3.6命名路由)

+0

更好没有期末:) +1(相同)答案虽然 – apneadiving

+0

伟大的工作。手动是什么意思?例如,我很困惑,因为这样可以很好地匹配'home'=>'pages#index',:via =>:获得 – Brian

+0

当你使用类似'resource:posts'的东西时,它会自动创建'posts_path','edit_post_path '等等。但是当你使用'match'语句时,Rails不会自动的知道你想要使用什么'xxxxx_path'名字。 –

1

地址:

:as => :deactivate 

在路线的终点