我正在尝试使用RoR中的form_for帮助程序生成表单,但我遇到的似乎是路由错误。以下是相关文件:
模型/ equipment.rb
class Equipment < ActiveRecord::Base
attr_accessible :name, :tracking_number
validates :tracking_number, :presence => true,
:uniqueness => { :case_sensitive => true }
end
控制器/ equipments_controllers.rb
class EquipmentsController < ApplicationController
def index
@equipments = Equipment.paginate(:page => params[:page])
end
def new
@equipment = Equipment.new
end
end
视图/设备/ new.html.rb
<h1>Add an equipment</h1>
<%= form_for (@equipment) do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<div class="field">
<%= f.label :name %> <br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :tracking_number %><br />
<%= f.text_field :tracking_number %>
</div>
<%= f.submit "Add" %>
<% end %>
的routes.rb
EquipmentTracking::Application.routes.draw do
root :to => "equipments#index"
resources :equipments
end
我没有看到任何错误,但他们输出以下内容:
NoMethodError in Equipments#new
Showing /opt/ror/equipment_tracking/app/views/equipments/new.html.erb where line #2 raised:
undefined method `equipment_index_path' for #<#<Class:0xb6725a2c>:0xb6724640>
如果我将其更改为
<%= form_for (:equipment) do |f| %>
它似乎工作正常。我也确定静态变量@equipment从开始传递
<%= @equipment %>
返回
#<Equipment:0xb685ece0>
我在这里不知所措。我刚刚按照railstutorial.org的书完成了我所做的事情,我完成了本书。
答案 0 :(得分:21)
我认为你的问题在于你使用“设备”这个词。如果您打开Rails控制台运行'equipment'.pluralize
,您将看到复数“设备”是“设备”。
所以我会搜索你的项目并用“设备”替换任何“设备”的实例,我敢打赌它会修复它。