2016-10-09 21 views
0

Ich halte diese Fehlermeldung erhalten, wenn ich meine FormNoMethodError in HealthReport # neue

Der Fehler machen möchten, zeigt die <% = form_for (@hreport) tun | f | %>, Ich bin mir nicht sicher, wo, wenn falsch oder ich etwas verpasst haben, jeder Hilfe ist zu schätzen wissen!

<div class="col-md-6 col-md-offset-3"> 

    <%= form_for(@hreports) do |f| %> 

     <%= f.label :"Student ID" %> 
     <%= f.text_field :studentid, class: 'form-control' %> 

Das ist mein health_report_controller.rb

class HealthReportController < ApplicationController 
    def index 
    @hreports = Healthreport.where(:user_id => current_user.id) 
    end 

    def new 
    @hreports = Healthreport.new 
    end 

    def create 
    @hreports = current_user.healthreports.build(hreport_params) 
    if @hreports.save 
     flash[:success] = "Report Submitted!" 
    else 

    end 

    end 


    def show 
    @hreports = Healthreport.find(params[:id]) 
    end 


    private 

    def set_hreport 
    @hreport = Healthreport.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def hreport_params 
    params.require(:Healthreport).permit(:date, :studentid, :department, :issue) 
    end 
end 

Das ist meine Ansicht

<% provide(:title, 'New Report') %> 
<h1>Health and Safety Report</h1> 

<div class="row"> 
    <div class="col-md-6 col-md-offset-3"> 

    <%= form_for(@hreports) do |f| %> 

     <%= f.label :"Student ID" %> 
     <%= f.text_field :studentid, class: 'form-control' %> 

     <%= f.label :"Department of applicant" %> 
     <%= f.text_field :department, class: 'form-control' %> 

     <%= f.label :"Description of Issues" %> 
     <%= f.text_area :issue, placeholder: "Write your report here...", class: 'form-control' %> 


     <%= f.submit "Submit", class: "btn btn-primary" %> 
    <% end %> 

Das ist mein healthreport.rb innen Modellordner

ist

Das ist mein healthreport.rb innerhalb db Ordner

class CreateHealthreports < ActiveRecord::Migration[5.0] 
    def change 
    create_table :healthreports do |t| 
     t.datetime :date 
     t.string :studentid 
     t.string :department 
     t.string :issue 

     t.timestamps 
    end 
    end 
end 

Es ist Migration db Datei

class AddUserToHealthreport < ActiveRecord::Migration[5.0] 
    def change 
    add_reference :healthreports, :user, foreign_key: true 
    end 
end 
+1

Können Sie die Berichtsdatei des Gesundheitsberichts anzeigen? Ich glaube, Sie haben einen einfachen Namensfehler. –

+0

Ja, ich habe meine Frage bearbeitet, ist das die Sie wollen? –

+0

Sind Sie sicher, dass das Modell so deklariert ist? Es scheint ein paar Rechtschreibfehler oder etwas zu geben. Zum Beispiel sollte das Modell healthreport.rb die Klasse Healthreport Thresh

Antwort

0

In Ihrem Controller, tun Sie dies:

def new 
    @hreports = Healthreport.new 
end 

Aber in der Ansicht, Sie erwarten dies

<%= form_for(@hreport) do |f| %> 

Sie übergeben @hreports aber versuchen, @hreport zu verwenden. Ändern Sie den Regler

def new 
    @hreport = Healthreport.new 
end 

zu sein (der Index Aktion sollte den Plural verwenden, sollten die anderen Aktionen im Singular verwenden)

zwei Schienen Konvention/style Dinge, die Sie sollten sich bewusst sein:

  1. Ein einzelner Variablenname (z. B. @hreport) bezieht sich auf ein einzelnes Objekt. Ein Plural dieses Namens (@hreports) verweist auf ein Array oder eine ActiveRecord-Beziehung.

  2. Modell und Regler sollte die gleiche Namensgebung Stil verwenden: Wenn der Controller health_report_controller.rb benannt und definiert eine HealthReportController, dann sollte die Modelldatei health_report.rb benannt werden und sollte eine HealthReport Klasse definieren.

+0

aktualisierte Ansicht vom OP gegeben ist mit der richtigen Variablen, finden Sie es am Ende der Frage. – Thresh

+1

uh, ok, dann bin ich ratlos. @Gary Vlc können Sie bitte überprüfen, dass der Controller und das Modell genau so sind, wie Sie es in Bezug auf Kapitalisierung und Pluralisierung (in der letzten Bearbeitung) geschrieben haben? Wenn Sie eine Klasse 'HealthReport' definieren, dann wird der Aufruf' Healthreport.new' diesen Fehler auslösen, da Rails keine Ahnung hat, was die 'Healthreport'-Klasse ist. –

+0

Ich nehme an, die Klasse, die Sie sagen, ist der Controller richtig? Mein tatsächlicher Controller-Name ist health_report_controller.rb, aber ich verwende RubyMine als IDE, es wird automatisch in HealthReport geändert, wird es irgendwas beeinflussen? –