2011-09-14 35 views
1

幫助我StackOveflow,你是我唯一的希望。Rails 3.1腳手架未定義方法`model_name'爲零:NilClass

我收到以下錯誤,它讓我瘋狂。

NoMethodError在玩家#新

顯示/home/paul/rails_projects/recruits/app/views/players/_form.html.haml其中線#1提出:

未定義的方法`模型名稱'的零:NilClass

提取的源(圍繞線#1):

1:=的form_for @player做| F |

2:-if @ player.errors.any?

3:#error_explanation

4:%H 2 = 「#{變複數(@ player.errors.count, 」錯誤「)}禁止該球員被保存:」

痕量模板夾雜物:app/views/players/new.html.haml

Rails.root:/ home/paul/rails_projects/recruits Application Trace |框架跟蹤|全面跟蹤

應用程序/視圖/播放/ _form.html.haml:1:_app_views_players__form_html_haml___279577567_106102840' app/views/players/new.html.haml:3:in _app_views_players_new_html_haml__860668925_106567710' 應用程序/控制器/ players_controller.rb:29:在`新」

這個使用我創建腳手架發電機,它在另一個領域爲我工作得很好,但顯然不在這裏。

以下是相關文件(我對scaffold命令生成的文件所做的唯一更改是將attr_accessable添加到播放器模型中)。

型號/ player.rb

class Player < ActiveRecord::Base 

    attr_accessible :first_name, :last_name, :scout_height, :scout_weight, 
    :scout_profile_url, :scout_star_rating, :scout_overall_ranking, 
    :scout_position_ranking, :scout_position, :espn_height, :espn_weight, 
    :espn_profile_url, :espn_star_rating, :espn_overall_ranking, 
    :espn_position_ranking, :espn_position, :rivals_height, :rivals_weight, 
    :rivals_profile_url, :rivals_star_rating, :rivals_overall_ranking, 
    :rivals_position_ranking, :rivals_position, :maxprep_height, :maxprep_weight, 
    :maxprep_profile_url, :maxprep_star_rating, :maxprep_overall_ranking, 
    :maxprep_position_ranking, :maxprep_position, :class, :school_commit, :loi_signed 

end 

控制器/ players_controller.rb

class PlayersController < ApplicationController 
    # GET /players 
    # GET /players.json 
    def index 
    @players = Player.all 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @players } 
    end 
    end 

    # GET /players/1 
    # GET /players/1.json 
    def show 
    @player = Player.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @player } 
    end 
    end 

    # GET /players/new 
    # GET /players/new.json 
    def new 
    @player = Player.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @player } 
    end 
    end 

    # GET /players/1/edit 
    def edit 
    @player = Player.find(params[:id]) 
    end 

    # POST /players 
    # POST /players.json 
    def create 
    @player = Player.new(params[:player]) 

    respond_to do |format| 
     if @player.save 
     format.html { redirect_to @player, notice: 'Player was successfully created.' } 
     format.json { render json: @player, status: :created, location: @player } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @player.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PUT /players/1 
    # PUT /players/1.json 
    def update 
    @player = Player.find(params[:id]) 

    respond_to do |format| 
     if @player.update_attributes(params[:player]) 
     format.html { redirect_to @player, notice: 'Player was successfully updated.' } 
     format.json { head :ok } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @player.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /players/1 
    # DELETE /players/1.json 
    def destroy 
    @player = Player.find(params[:id]) 
    @player.destroy 

    respond_to do |format| 
     format.html { redirect_to players_url } 
     format.json { head :ok } 
    end 
    end 
end 

的意見/播放/ new.html.haml

%h1 New player 

= render 'form' 

= link_to 'Back', players_path 

的意見/播放/ _form。 html.haml

= form_for @player do |f| 
    -if @player.errors.any? 
    #error_explanation 
     %h2= "#{pluralize(@player.errors.count, "error")} prohibited this player from being saved:" 
     %ul 
     - @player.errors.full_messages.each do |msg| 
      %li= msg 

    .field 
    = f.label :first_name 
    = f.text_field :first_name 
    .field 
    = f.label :last_name 
    = f.text_field :last_name 
    .field 
    = f.label :scout_height 
    = f.number_field :scout_height 
    .field 
    = f.label :scout_weight 
    = f.number_field :scout_weight 
    .field 
    = f.label :scout_profile_url 
    = f.text_field :scout_profile_url 
    .field 
    = f.label :scout_star_rating 
    = f.number_field :scout_star_rating 
    .field 
    = f.label :scout_overall_ranking 
    = f.number_field :scout_overall_ranking 
    .field 
    = f.label :scout_position_ranking 
    = f.number_field :scout_position_ranking 
    .field 
    = f.label :scout_position 
    = f.text_field :scout_position 
    .field 
    = f.label :espn_height 
    = f.number_field :espn_height 
    .field 
    = f.label :espn_weight 
    = f.number_field :espn_weight 
    .field 
    = f.label :espn_profile_url 
    = f.text_field :espn_profile_url 
    .field 
    = f.label :espn_star_rating 
    = f.number_field :espn_star_rating 
    .field 
    = f.label :espn_overall_ranking 
    = f.number_field :espn_overall_ranking 
    .field 
    = f.label :espn_position_ranking 
    = f.number_field :espn_position_ranking 
    .field 
    = f.label :espn_position 
    = f.text_field :espn_position 
    .field 
    = f.label :rivals_height 
    = f.number_field :rivals_height 
    .field 
    = f.label :rivals_weight 
    = f.number_field :rivals_weight 
    .field 
    = f.label :rivals_profile_url 
    = f.text_field :rivals_profile_url 
    .field 
    = f.label :rivals_star_rating 
    = f.number_field :rivals_star_rating 
    .field 
    = f.label :rivals_overall_ranking 
    = f.number_field :rivals_overall_ranking 
    .field 
    = f.label :rivals_position_ranking 
    = f.number_field :rivals_position_ranking 
    .field 
    = f.label :rivals_position 
    = f.text_field :rivals_position 
    .field 
    = f.label :maxprep_height 
    = f.number_field :maxprep_height 
    .field 
    = f.label :maxprep_weight 
    = f.number_field :maxprep_weight 
    .field 
    = f.label :maxprep_profile_url 
    = f.text_field :maxprep_profile_url 
    .field 
    = f.label :maxprep_star_rating 
    = f.number_field :maxprep_star_rating 
    .field 
    = f.label :maxprep_overall_ranking 
    = f.number_field :maxprep_overall_ranking 
    .field 
    = f.label :maxprep_position_ranking 
    = f.number_field :maxprep_position_ranking 
    .field 
    = f.label :maxprep_position 
    = f.text_field :maxprep_position 
    .field 
    = f.label :class 
    = f.number_field :class 
    .field 
    = f.label :school_commit 
    = f.text_field :school_commit 
    .field 
    = f.label :loi_signed 
    = f.check_box :loi_signed 
    .actions 
    = f.submit 'Save' 

的routes.rb

Recruits::Application.routes.draw do 

    resources :schools 
    resources :players 

    #get \"users\/show\" 

    root :to => "home#index" 

    devise_for :users 
    resources :users, :only => :show 
end 

回答

3

我猜在這裏,但我相信這是因爲你給你的播放器的模型稱爲「類」的屬性,你應該改變,要:player_class什麼的。類是保留字。您還應該更新您的_form.html.erb和index.html.erb和show.html.erb文件以使用此新名稱。

+0

感謝大衛,我改變了播放器模型的命名。我已經做了一些其他的事情來解決這個問題,但回過頭來看,這似乎很有用,所以我很確定這是因爲你的建議,而不是我的其他工作。 –

相關問題