我遇到的问题与此问题中提到的问题非常相似:NoMethodError / undefined method `foobar_path' when using form_for然而,那里的答案让我感到困惑。
在开发我正在开发的应用程序之前,我浏览了Michael Hartel的Ruby on Rails教程,我试图复制他在创建模型时创建用户模型时所做的事情。我的应用程序旨在成为大学教授的数据库,所以我使用的模型被称为“教授”,但它与“用户”的概念相同。
以下是我的New.html.erb的代码,用户可以在这里创建一位新教授:
<%provide(:title, 'Add a professor') %>
<div class="jumbotron">
<h2> New Professor</h2>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for (@professor) do |f| %>
<%= f.label "First Name" %>
<%= f.text_field :fname %>
<%= f.label "Last Name" %>
<%= f.text_field :lname %>
<%= f.label "School" %>
<%= f.text_field :school %>
<%= f.submit "Add this professor", class: "btn btn-primary" %>
<% end %>
</div>
</div>
</div>
然后这是来自Professor_controller.rb的代码
class ProfessorController < ApplicationController
def show
@professor = Professor.find(params[:id])
end
def new
@professor = Professor.new
end
end
当我替换
<%= form_for (@professor) do |f| %>
在new.html.erb中:
<%= form_for (:professor) do |f| %>
有效。我上面提到的线程说了一些关于为控制器添加路由的内容。我的routes.rb看起来像这样:
Rails.application.routes.draw do
root 'static_pages#home'
get 'about' => 'static_pages#about'
get 'newprof' => 'professor#new'
resources :professor
我不相信在迈克尔·哈特尔的书中他做了不同的事情。我仍然是Rails的新手,请原谅我,如果这是一个简单的问题,我已经坚持了几天,我已经尝试了很多工作,使用的例子:教授工作,但@教授没有,我不知道为什么。
答案 0 :(得分:1)
在Rails环境中,了解各种名称的复数要求非常重要。请务必将资源声明为复数:
resources :professors
以单数形式声明它可能会弄乱自动生成的路线,您将获得professor_path
而不是professors_path
之类的东西。你可以查看它们的用途:
rake routes
如果您收到有关x_path
遗失的错误,请检查您的路线列表中是否有名为x
的路线。最常见的情况是它被错误标记,输入错误,或者您未能正确复数。