Rails NoMethodError

时间:2016-02-17 16:29:23

标签: ruby-on-rails ruby

我遇到的问题与此问题中提到的问题非常相似: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的新手,请原谅我,如果这是一个简单的问题,我已经坚持了几天,我已经尝试了很多工作,使用的例子:教授工作,但@教授没有,我不知道为什么。

1 个答案:

答案 0 :(得分:1)

在Rails环境中,了解各种名称的复数要求非常重要。请务必将资源声明为复数:

resources :professors

以单数形式声明它可能会弄乱自动生成的路线,您将获得professor_path而不是professors_path之类的东西。你可以查看它们的用途:

rake routes

如果您收到有关x_path遗失的错误,请检查您的路线列表中是否有名为x的路线。最常见的情况是它被错误标记,输入错误,或者您未能正确复数。