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

时间:2015-08-19 08:04:50

标签: ruby-on-rails ruby-on-rails-4

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

尝试此操作(在新应用中):

rails generate scaffold Nursery name:string

现在转到索引(http://localhost:3000/nurseries)并点击“新托儿所”。您将收到错误:

ActionController::UrlGenerationError in Nurseries#new 

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

rails generate scaffold Manuscript title:string

它只是有效。

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

Rails.application.routes.draw do
  resources :manuscripts
  resources :nurseries
  resources :products

以下是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 %>

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

编辑:更多错误:

 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]

2 个答案:

答案 0 :(得分:5)

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

您可以通过指定变形规则来解决这个问题:

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

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

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

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

答案 1 :(得分:-4)

link_to方法导致的错误。

 <%= link_to 'New Nurserie', new_nurserie_path %>

然后是new.html.erb

<%= render 'form' %>

和_form.html.erb

<%= form_for(@nurserie) do |f| %>
 --logic
<% end %>