2016-02-17 63 views
0

我有一個問題非常類似於這個問題在這裏問:NoMethodError/undefined method `foobar_path' when using form_for然而,答案在那裏混淆了我。
在開發我現在正在開發的應用程序之前,我經歷了Michael Hartel的Ruby on Rails教程,我嘗試複製他在創建用戶模型時創建我的模型時所完成的工作。我的應用程序被設計爲大學教授的數據庫,因此我使用的模型被稱爲「教授」,但它與「用戶」的概念相同。Rails的NoMethodError

這裏是我的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 

我不相信在Michael Hartel的書中他做了任何不同的事情。我對Rails仍然很陌​​生,所以請原諒我,如果這是一個簡單的問題,我已經堅持了幾天,並且嘗試了很多工作,使用了以下實例:professor works但@教授沒有,我不知道爲什麼。

+0

注意:請注意像'x(y)'而不是'x(y)'方法調用帶空格。空間可能會導致您的陳述被解釋爲您可能無意的方式。 – tadman

+3

你的意思是'資源:教授'嗎?缺少複數可能會搞亂你的路由表。 – tadman

+0

謝謝你。它並沒有幫助解決這個問題,但我會盡量做到這一點,這是Java的一個壞習慣,或者我猜想的。 – tfantina

回答

1

在Rails環境中,瞭解各種名稱的多元化需求非常重要。一定要聲明你資源複數:

resources :professors 

在單數月陷入困境自動生成路線聲明它,你會得到類似的東西,而不是professor_pathprofessors_path。您可以檢查一下這些與:

rake routes 

如果你得到關於x_path是失蹤的錯誤,請檢查是否有與你的路由列表的名稱x的路線。最常見的情況是錯誤標籤,錯字,或者您未能正確複用它。

+0

現在我得到一個加載錯誤: 無法自動加載常量ProfessorsController,預期/用戶/ tfantina /文檔/代碼和網站/ Ruby&Rails的東西/收視率測試/應用程序/控制器/ professors_controller.rb來定義它 – tfantina

+0

它是可能是您無意中定義了「ProfessorController」的情況。 – tadman