One to many relationships

I was trying to make one to many relationships - between professors controller to rate_professors controller and used scaffold. it's giving me this error-

NoMethodError in RateProfessorsController#index undefined method `rate_professors' for nil:NilClass app/controllers/rate_professors_controller.rb:7:in `index' Request

Parameters: {"professor_id"=>"1"}

here are the codes for two controllers and index page--

class ProfessorsController < ApplicationController   # GET /professors   # GET /professors.json   def index     @professors = Professor.all     @rate_professors=RateProfessor.order(:lname)

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

  # GET /professors/1   # GET /professors/1.json   def show     @professor = Professor.find(params[:id])

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

  # GET /professors/new   # GET /professors/new.json   def new     @professor = Professor.new

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

  # GET /professors/1/edit   def edit     @professor = Professor.find(params[:id])   end

  # POST /professors   # POST /professors.json   def create     @professor = Professor.new(params[:professor])

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

  # PUT /professors/1   # PUT /professors/1.json   def update     @professor = Professor.find(params[:id])

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

  # DELETE /professors/1   # DELETE /professors/1.json   def destroy     @professor = Professor.find(params[:id])     @professor.destroy

    respond_to do |format|       format.html { redirect_to professors_url }       format.json { head :no_content }     end   end end

For rate_professors controller: class RateProfessorsController < ApplicationController   # GET /rate_professors   # GET /rate_professors.json   def index     @rate_professors = RateProfessor.all    professor = Professor.find(params[:professor_id])    @rate_professor = @Professor.rate_professors.build([professor:professor])

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

  # GET /rate_professors/1   # GET /rate_professors/1.json   def show     @rate_professor = RateProfessor.find(params[:id])

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

  # GET /rate_professors/new   # GET /rate_professors/new.json   def new

        @professor = Professor.find(params[:id])

     @rate_professor = RateProfessor.new

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

  # GET /rate_professors/1/edit   def edit     @rate_professor = RateProfessor.find(params[:id])   end

  # POST /rate_professors   # POST /rate_professors.json   def create     @professor = Professor.find(params[:id])         @rate_professor = @Professor.rate_professors.build([professor:professor])

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

  # PUT /rate_professors/1   # PUT /rate_professors/1.json   def update     @rate_professor = RateProfessor.find(params[:id])

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

  # DELETE /rate_professors/1   # DELETE /rate_professors/1.json   def destroy     @rate_professor = RateProfessor.find(params[:id])     @rate_professor.destroy

    respond_to do |format|       format.html { redirect_to rate_professors_url }       format.json { head :no_content }     end   end end

index page <h1>Listing rate_professors</h1>

<table>   <tr>     <th>Lname</th>     <th>Helpfulness</th>     <th>Explanation</th>     <th>Technologyused</th>     <th>Exams</th>     <th>Homeworksorassignments</th>     <th>Class</th>     <th>Section</th>     <th>Comments</th>     <th></th>     <th></th>     <th></th>   </tr>

<% @professor.rate_professors.each do |rate_professor| %>   <tr>      <td><%= professor.lname %></td>     <td><%= rate_professor.Helpfulness %></td>     <td><%= rate_professor.Explanation %></td>     <td><%= rate_professor.TechnologyUsed %></td>     <td><%= rate_professor.Exams %></td>     <td><%= rate_professor.HomeworksOrAssignments %></td>     <td><%= rate_professor.Class %></td>     <td><%= rate_professor.Section %></td>     <td><%= rate_professor.comments %></td>   </tr> <% end %> </table>

<br />

<%= link_to 'New Rate professor', new_rate_professor_path %>

Ruby is telling you're calling the rate_professors method on nil on this line, so your first step should be to have a look at this like. You're calling it on @Professor which isn't initialized, therefore it's nil. You've got the exact same mistake in a different action too.

Fred