4
<%= link_to t('.new', :default => t("helpers.links.new")), new_equipment_path, :class => 'btn btn-primary' %>

我在视图中有上面的代码,但是在单击链接时出现以下错误:No route matches {:action=>"show", :controller=>"equipment"}

我的路线文件包含:

resources :equipment

resources :workouts

match ':controller(/:action(/:id))(.:format)'

为什么要尝试访问 show 操作?

以下是我的路线中的条目:

   equipment_index GET        /equipment(.:format)                   equipment#index
                   POST       /equipment(.:format)                   equipment#create
     new_equipment GET        /equipment/new(.:format)               equipment#new
    edit_equipment GET        /equipment/:id/edit(.:format)          equipment#edit
         equipment GET        /equipment/:id(.:format)               equipment#show
                   PUT        /equipment/:id(.:format)               equipment#update
                   DELETE     /equipment/:id(.:format)               equipment#destroy
4

3 回答 3

6

这个问题之前已经出现过,并且与 rails 脚手架如何为具有单复数名称的模型生成 new.html.erb 文件有关。

如果您检查form_fornew.html.erb 文件中的 ,您将equipment_path在底部的 link_to 中看到。对于这些具有单数==复数名称的模型,它指的是实际用于show操作的路线,因此您的错误消息。

建议通常是“尽可能避免使用这样的模型名称”,或者它涉及到 config/initializers/inflections.rb 文件的一些混乱,以强制使用复数版本的模型名称。当然,你最终会得到一个听起来很奇怪的模型引用的应用程序:“设备”不是很好用(以后有人会“修复”它,又把事情搞砸了)。

为了保持模型名称语法正确,您需要修复 form_for 即:

<% form_for(@equipment, :url=> {:action=>'create'}) do |f| %>

和link_to:

<%= link_to 'Back', equipment_index_path %>

于 2012-07-07T09:14:03.327 回答
0

您是否尝试equiment在您的routes.rb中添加“s” ?

resources :equipments
于 2012-07-07T13:24:51.030 回答
0

由于设备被认为是不可数名词,您应该能够使用变形来解决这个问题。

关于变形的 Rails文档实际上使用设备作为其示例的一部分。

将以下内容添加到您的config/initializers/inflections.rb.

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable 'equipment'
end

附加信息:Rails 3 资源路由中的不可数名词

于 2015-09-04T19:50:35.287 回答