我有一个奇怪的问题,某些型号因为他们的名字而不能很好地使用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]
答案 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 %>