ruby on rails-不存在的路线

时间:2015-06-11 19:35:41

标签: ruby-on-rails

我有一个控制器文件,

abc_controller.rb. 

我在其中定义了show方法。

我有一个视图文件,

show.html.haml

在app / views / abc /

在我的routes.rb文件中,我提供以下命令

resources :abc

我有一个按钮

= link_to 'abc', abc_path, class: 'btn btn-default'

但是当我点击按钮时,它不会进入新页面。

我收到不存在的路线错误。 由于我是rails的新手,我无法弄清楚问题是什么。

2 个答案:

答案 0 :(得分:0)

如果您执行resources(复数形式),则显示的结果路线需要ID:/abc/:id(.:format),因此abc_path要求您传递:id或对象。如果您正在处理单数abc(resource :abc),则生成的路径不需要:id,因此您的代码应该可以工作(这种情况不太常见,但很难用您的" abc"例子。

答案 1 :(得分:0)

您收到错误,因为没有abc_path这样的路径。运行rake routes,您将看到Rails可以理解的路由。在您的示例中,resources :abc生成以下路由。

abc_index GET      /abc(.:format)            abc#index
          POST     /abc(.:format)            abc#create
  new_abc GET      /abc/new(.:format)        abc#new
 edit_abc GET      /abc/:id/edit(.:format)   abc#edit
      abc GET      /abc/:id(.:format)        abc#show
          PATCH    /abc/:id(.:format)        abc#update
          PUT      /abc/:id(.:format)        abc#update
          DELETE   /abc/:id(.:format)        abc#destroy

第一列是命名路线。因此,为了进入index的{​​{1}}操作,路由名为abc_controller。有一个abc_index_path,但它需要一个abc_path参数,这意味着你需要传递一些东西。在您的情况下,传递给此方法没有明确的价值,因此试用只会使用id,这会将您重定向到abc_path(1)。这将转到将/abc/1设置为params[:id]的展示操作。