2016-08-24 26 views
0

Beim Versuch, einen neuen Job in meinem CRM-Projekt zu erstellen, wird kein Methodenfehler angezeigt. Ich habe dieses Projekt übernommen, als ich vor einem Monat bei der Firma angefangen habe, die Codebase ein paar Mal überprüft habe und das Problem nicht sehe oder wo sich die Dinge nicht aufaddieren. Ich habe das Gefühl, als würde ich es übersehen, weil ich frustriert bin, deshalb bitte ich um Hilfe von einigen erfahrenen Rails-Entwicklern. Danke im Voraus!NoMethodError in JobsController # Neu

Relevante Abschnitt Jobs-Controller, wo Fehler auftreten:

# GET /jobs/new 
    def new 
    @job = Job.opportunity.new do |j| 
     if params[:opportunity_id].present? 
     j.opportunity_id = params[:opportunity_id] 
     end 

Jobs/Ausblick:

<% @job[:opportunity_id] = params[:opportunity_id] %> 
<% title "New #{@job.opportunity.name} Job"%> 

<% 
@job[:name] = @job.opportunity.name 
@pm = @job.opportunity.pm_id 


%> 

<br><br> 
<%= render 'form' %> 

Jobs Modell:

class Job < ActiveRecord::Base 
    mount_uploader :file1, AttachmentUploader 
    belongs_to :cost_proposal 
    belongs_to :opportunity 

    def Job 
    has_many :opportunities 
    end 
end 

Jobs Tabelle in schema.rb:

create_table 'jobs', force: true do |t| 
    t.integer 'cost_proposal_id' 
    t.string 'number' 
    t.string 'name' 
    t.date  'flight_date' 
    t.string 'flight_sub' 
    t.string 'camera' 
    t.string 'roll' 
    t.string 'map_type' 
    t.integer 'plan_only' 
    t.integer 'lab_only' 
    t.integer 'est_hrs_model' 
    t.date  'due_date' 
    t.integer 'edge_job_id' 
    t.integer 'custom_trans' 
    t.integer 'comp_inhouse' 
    t.date  'delivered_date' 
    t.integer 'done' 
    t.date  'control_in' 
    t.string 'control_status' 
    t.date  'at_date' 
    t.string 'control_results' 
    t.integer 'control_check' 
    t.string 'scan_staff' 
    t.date  'scan_date' 
    t.integer 'scan_check' 
    t.string 'comp_staff' 
    t.date  'comp_date' 
    t.integer 'comp_check' 
    t.string 'comp_sub' 
    t.date  'comp_sub_due_date' 
    t.integer 'comp_sub_rec' 
    t.string 'img_staff' 
    t.date  'img_date' 
    t.integer 'img_check' 
    t.string 'edit_staff' 
    t.date  'edit_date' 
    t.integer 'edit_check' 
    t.text  'notes' 
    t.string 'file1' 
    t.string 'file2' 
    t.string 'file3' 
    t.string 'file4' 
    t.string 'file5' 
    t.string 'add_files' 
    t.datetime 'created_at' 
    t.datetime 'updated_at' 
    t.integer 'flown' 
    t.integer 'cust_trans' 
    t.integer 'delivered' 
    t.string 'at_staff' 
    t.integer 'at_check' 
    t.integer 'opportunity_id' 
    end 
+1

Was ist der Fehler, auf welcher Linie passiert es? – PoloniculMov

+0

@PoloniculMov job = Job.opportunity.new tun | j | ist, wo der Fehler auftritt. – kmaune

Antwort

1

Ihre Verbände brauchen eine gewisse Aufmerksamkeit. In Ihrem Jobmodell haben Sie sowohl Chancen als auch Möglichkeiten. So sollte das nicht funktionieren. Sie können eine primary_opportunity in der Opportunities-Auflistung haben, jedoch mit einer Eigenschaft.

Zunächst einmal, das ist falsch:

def Job 
    has_many :opportunities 
    end 

Es sollte keine Methode namens Job (Kapital J) sein, Wörter, die mit einem Großbuchstaben beginnen, sind Klassen und Konstanten, diese Methoden nicht. Klassenmethoden (def Job) haben nicht den Instanzbereich. Dies ist kein Ort für Assoziationen. Fügen Sie Methoden in Ihre def Job ein, um vor der Instanziierung zugängliche Methoden zu erstellen. Assoziationen sollten innerhalb der Instanzmethodendefinition liegen (außerhalb def Job) Entfernen Sie den def Job und beenden Sie ihn. Dies wird Ihnen das Modell:

class Job < ActiveRecord::Base 
    mount_uploader :file1, AttachmentUploader 
    belongs_to :cost_proposal 
    belongs_to :opportunity 
    has_many :opportunities 
end 

Von dort müssen Sie bestimmen, ob Sie eine belongs_to :opportunity oder eine has_many :opportunities Beziehung haben wollen. Wenn jeder Job viele davon hat, entfernen Sie die belongs_to.

Zweitens ruft Ihre @job = Job.opportunity.new do |j| Zeile eine Methode auf einer Konstante statt einer Instanz auf. Ändern Sie diese Zeile an:

@job = Job.new 
@job.opportunties.new do |j| 

Der obige Code wird vorausgesetzt, Sie verwenden, um die has_many Variante Ihrer dupliziert Assoziationen.

Hoffe, dass hilft.

+0

Danke, ich werde dies eine Chance geben. Das ist alles Code, den ich nicht geschrieben habe, also muss ich alles aufräumen und es richtig funktionieren lassen. Nochmals vielen Dank, ich schätze es. – kmaune

+0

Ich bin zu der Erkenntnis gekommen, dass die Assoziationen in dem Projekt einige große Aufmerksamkeit benötigen. Danke noch einmal. – kmaune