Ruby on rails 脚手架生成的示例使用ActionController::UrlGenerationError失败
我有一个奇怪的问题,就是某些型号仅仅因为它们的名字(或者在我看来是这样)而不能很好地使用rails。我试着用一个简单的脚手架来重现这个问题(我以前一直都是手工做的),因为我认为这样会减少用户出错的机会,当然我也遇到了同样的问题。我正在使用Rails 4.2.3和ruby 2.2.2p95(ubuntu) 尝试此操作(从新应用中): 现在转到索引()并单击“新建托儿所”。您将得到一个错误:Ruby on rails 脚手架生成的示例使用ActionController::UrlGenerationError失败,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有一个奇怪的问题,就是某些型号仅仅因为它们的名字(或者在我看来是这样)而不能很好地使用rails。我试着用一个简单的脚手架来重现这个问题(我以前一直都是手工做的),因为我认为这样会减少用户出错的机会,当然我也遇到了同样的问题。我正在使用Rails 4.2.3和ruby 2.2.2p95(ubuntu) 尝试此操作(从新应用中): 现在转到索引()并单击“新建托儿所”。您将得到一个错误: ActionController::UrlGenerationError in Nurseries#new
ActionController::UrlGenerationError in Nurseries#new
但是如果我尝试去创造其他的东西,比如说
rails generate scaffold Manuscript title:string
它只是工作
这是我的(自动生成的)路由文件:
Rails.application.routes.draw do
resources :manuscripts
resources :nurseries
resources :products
这是为托儿所生成的部分表单(…/nurries/_form.html.erb):
链接到方法导致的错误
<%= link_to 'New Nurserie', new_nurserie_path %>
然后是new.html.erb
<%= render 'form' %>
和_form.html.erb
<%= form_for(@nurserie) do |f| %>
--logic
<% end %>
--逻辑
我有一个预感,经过测试证明是正确的:)
Rails(或者只是其中的一部分,可能是负责脚手架的部分)不知道如何正确地将托儿所多元化
您可以通过指定屈折变化规则来解决此问题:
# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.irregular 'nursery', 'nurseries'
end
破坏苗圃脚手架,然后对其进行再生,这样它就可以工作了
作为一般的经验法则,当只针对特定的控制器/模型/等名称出现错误时,您应该查看其变化
特殊单词的复数化是基于框架中硬编码的列表进行的。虽然这个列表很大,但它并不是100%完整。rake routes | grep Turry的输出是什么??应该还有更多您遗漏的错误。请把它寄出去。@Emu什么也没有。老实说。@Pavan我已经把它贴在底部了。它似乎在抱怨缺少“id”字段,但在这个阶段,我认为它没有一个(它还没有被保存,对吗?),所以我不明白问题是什么。我在我的项目中测试了你的代码,我也收到了相同的错误。非常奇怪。呃,我不知道你的意思是什么,但是谢谢你的尝试。您是否尝试按照我的说明创建示例项目(如上)?修复了它,太棒了!非常感谢。我也这么想,我已经更新了我的答案。这不是一个bug。Rails(或者很可能只是其中的一部分)不知道如何正确地将“托儿所”多元化。
<%= render 'form' %>
<%= form_for(@nurserie) do |f| %>
--logic
<% end %>
# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.irregular 'nursery', 'nurseries'
end