Scaffold生成的示例因ActionController :: UrlGenerationError而失败

ac_*_*ac_ 2 ruby-on-rails ruby-on-rails-4

我有一个奇怪的问题,某些模型因为他们的名字而不能很好地使用rails(或者在我看来这样).我尝试用一​​个简单的脚手架重新创建这个问题(我之前一直在手工完成),因为我认为那样用户错误的机会就会减少,当然我也遇到了同样的问题.我正在使用Rails 4.2.3和ruby 2.2.2p95(ubuntu).

试试这个(来自新的应用程序):

rails generate scaffold Nursery name:string
Run Code Online (Sandbox Code Playgroud)

现在转到索引(http:// localhost:3000/nurseries)并单击"新托儿所".你会收到一个错误:

ActionController::UrlGenerationError in Nurseries#new 
Run Code Online (Sandbox Code Playgroud)

然而,如果我尝试创造别的东西,说......

rails generate scaffold Manuscript title:string
Run Code Online (Sandbox Code Playgroud)

它只是有效.

这是我的(自动生成的)路线文件:

Rails.application.routes.draw do
  resources :manuscripts
  resources :nurseries
  resources :products
Run Code Online (Sandbox Code Playgroud)

这是为Nurseries(.../nurseries/_form.html.erb)生成的部分部分:

<%= form_for(@nurseries), url: nurseries_path(@nurseries) do |f| %>
  <% if @nurseries.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@nurseries.errors.count, "error") %> prohibited this nurseries from being saved:</h2>
      <ul>    
      <% @nurseries.errors.full_messages.each do |message| %>    
        <li><%= message %></li>    
      <% end %>    
      </ul>    
    </div>    
  <% end %>

  <div class="actions">    
    <%= f.submit %>    
  </div>    
<% end %>
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该如何解决?你能救你的理智吗?

编辑:更多的错误:

 Showing /home/alex/ror-code/TestApp/app/views/nurseries/_form.html.erb where line #1 raised:

No route matches {:action=>"show", :controller=>"nurseries"} missing required keys: [:id]
Run Code Online (Sandbox Code Playgroud)

Mih*_*scu 5

经过测试证明是正确的,我有一种预感:) Rails(或者只是它的某些部分,可能是脚手架负责的部分)不知道如何正确地复制苗圃.

您可以通过指定变形规则来绕过它:

# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.irregular 'nursery', 'nurseries'
end
Run Code Online (Sandbox Code Playgroud)

摧毁然后再生幼儿园脚手架,它会起作用.

作为一般经验法则,您应该在仅针对特定控制器/模型/等发生错误时查看变形.名称.

特殊单词的复数基于框架中硬编码的列表而发生.虽然此列表很大,但并非100%完整.