2011-11-25 13 views
0

好的,我需要这个帮助。我用非标准的行动来定义资源。它看起来像这样在config/routes.rb添加动作的命名路由不被识别

1 Upload::Application.routes.draw do 
2 
3 resources :lib_imports, :only => [:index, :new, :create, :show] do 
4  get 'reimport', :on => :member 
5 end 
    ... 

我可以看到我希望,当我运行rails routes

$ rake routes 
reimport_lib_import GET /lib_imports/:id/reimport(.:format) {:action=>"reimport", :controller=>"lib_imports"} 
     lib_imports GET /lib_imports(.:format)    {:action=>"index", :controller=>"lib_imports"} 
    new_lib_import GET /lib_imports/new(.:format)   {:action=>"new", :controller=>"lib_imports"} 
    edit_lib_import GET /lib_imports/:id/edit(.:format)  {:action=>"edit", :controller=>"lib_imports"} 
     lib_import GET /lib_imports/:id(.:format)   {:action=>"show", :controller=>"lib_imports"} 
... 

我试图使用命名路线“reimport_lib_import”中的索引视图的路线LibImport模型,index.html.erb,其中有一部分是这样的:

... 
10 <% @lib_imports.each do |lib_import| %> 
11 <tr> 
12  <td><%= lib_import.spreadsheet %></td> 
13  <td><%= link_to 'Show', lib_import %></td> 
14  <td><%= link_to 'Re-import', reimport_lib_import %></td> 
15 </tr> 
16 <% end %> 
... 

然而,其结果是,浏览器显示错误。错误的相关部分是:

Showing /home/mike/rails_projects/experiments/upload/app/views/lib_imports/index.html.erb where line #14 raised: 

undefined local variable or method `reimport_lib_import' for #<#<Class:0x007fa938a06778>:0x007fa938950720> 

Extracted source (around line #14): 

11: <tr> 
12:  <td><%= lib_import.spreadsheet %></td> 
13:  <td><%= link_to 'Show', lib_import %></td> 
14:  <td><%= link_to 'Re-import', reimport_lib_import %></td> 
15: </tr> 
16: <% end %> 
17: </table> 

我的问题是:为什么Rails的抱怨reimport_lib_import当我尝试使用它呢?事实上,它在前一行航行了lib_import而没有抱怨,但这次旅行让我颇为疑惑任何人有任何想法?

+2

是否使用'reimport_lib_import_url'而不是'reimport_lib_import'改变任何东西?我有点生锈与Rails 2. –

+0

reimport_lib_import_url或reimport_lib_import_path应该工作。如果您再次遇到错误,请告诉我。 –

+0

德文和Bhushan,你是对的。感谢您的评论。 Devin我正在使用Rails 3,但很好奇:在我的问题中,是什么让你认为它是Rails 2?我在做Rails 3中过时的东西吗? –

回答

1

你应该在rake routes需要使用

<td><%= link_to 'Show', lib_import_path(lib_import) %></td> 
<td><%= link_to 'Re-import', reimport_lib_import_path(lib_import) %></td> 

所产生的名字(如图所示),然后依次为_path相对路径,或_url一个完整的URL。其次,如果是成员路径,则需要指定成员,在本例中为lib_import本身。

希望这会有所帮助。

+0

是的,就是这样。感谢您帮助新手。 –

相关问题