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)
经过测试证明是正确的,我有一种预感:) Rails(或者只是它的某些部分,可能是脚手架负责的部分)不知道如何正确地复制苗圃.
您可以通过指定变形规则来绕过它:
# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.irregular 'nursery', 'nurseries'
end
Run Code Online (Sandbox Code Playgroud)
摧毁然后再生幼儿园脚手架,它会起作用.
作为一般经验法则,您应该在仅针对特定控制器/模型/等发生错误时查看变形.名称.
特殊单词的复数基于框架中硬编码的列表而发生.虽然此列表很大,但并非100%完整.
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |