2017-12-29 2 views
0

Ich habe ein Jobmodell, das eine Company_id als Fremdschlüssel enthält. Auf dem Job neue Seite, ich einen neuen Job mit einfacher Form wie dieseKeine Route entspricht [POST] "/ jobs"

<%= simple_form_for (@job) do |f| %> 
    <%= f.input :title, label: "Title of job" %> 
    <%= f.submit 'Create', class: "btn btn-success" %> 
    <% end %> 

erstellen möchte Das ist meine verschachtelte Route ist

resources :companies do 
    resources :jobs, only: [:show, :new, :create, :update, :destroy] 
    end 

In meinen Arbeitsplätzen neue Controller und create-Methode habe ich

def new 
@job = Job.new 
end 

    def create 
    @job = Job.new(job_params) 
    @company = params[:company_id] 
    @job.company_id = @company 
     if @job.save 
     redirect_to company_job_path 
     else 
     render :new 
     end 
    end 

Dies ist der Weg zu der Seite Job zeigen

   company_job GET /companies/:company_id/jobs/:id(.:format) jobs#show 

und der Auftrag erstellen Seite

  company_jobs POST /companies/:company_id/jobs(.:format)  jobs#create 

Ich erhalte den Fehler unten, wenn ich versuche, einen Job mit einfacher Form zu erstellen.

Keine Route treffer [POST] "/ Jobs"

Jede Hilfe würde geschätzt.

Antwort

1

verschachtelte Routen Nach müssen Sie company vor Jobs setzen so entweder before action set company Fund Unternehmen vor dem Gebrauch verwenden diese

in Controller

before_action :set_company 
def new 
#@company = Company.find(params[:company_id]) 
@job = @company.jobs.new 
end 
private 
    def set_company 
    @company = Company.find(params[:company_id]) 
    end 

im Hinblick auf vollständige URL übergeben

<%= simple_form_for @job, :url => company_jobs_path(@company, @job), :method => :post%> 
     <%= f.input :title, label: "Title of job" %> 
     <%= f.submit 'Create', class: "btn btn-success" %> 
    <% end %> 
+0

Danke, es funktioniert. Ich habe die Datenbank überprüft und den neuen Job gespeichert. wenn ich versuche, auf die Jobshow-Seite umzuleiten, erhalte ich den Fehler Keine Route stimmt überein {: action => "show",: company_id => "13",: controller => "jobs"}, fehlende erforderliche Schlüssel: [: Ich würde]. Das ist meine Weiterleitung in der Create-Aktion. if @ job.save redirect_to company_job_path Ich würde gerne wissen, wie ich die neue Job-ID an die Route übergeben und erfolgreich auf die Job-Show-Seite umleiten kann. Danke für Ihre Hilfe –

+0

@HakeemBaba 'if @ job.save redirect_to_unternehmen_job_pfad (@unternehmen, @job)', wie ich erwähnt, dass Ihre Route verschachtelt ist und in jeder Route müssen Sie an 'company_id' übergeben, so dass Sie hier in Show Aktionen in Ihren Routen benötigen 'company_id' und' id'. Ich hoffe, es hat Ihnen geholfen, fühlen Sie sich frei, die Antwort zu akzeptieren, wenn es Ihnen geholfen hat. – Gabbar

+0

@HakeemBaba stecken Sie immer noch in diesem Problem fest? – Gabbar

2

Fügen Sie einfach <%= simple_form_for [@company, @job] do |f| %> anstelle von <%= simple_form_for (@job) do |f| %> hinzu Ich nehme an, Sie haben @company festgelegt, wenn Formular gerendert wird.

+0

Ich bekomme immer noch den gleichen Fehler. Ich verstehe Ihren letzten Kommentar über die Einstellung von @company beim Rendern des Formulars nicht ganz. Kannst du das bitte für mich klären? –

+0

@HakeemBaba Angenommen, Sie sind auf der Show-Seite, dann müssen Sie '@ Firma' in der Aktionsshow einstellen und nach Unternehmen im Formular suchen. Teil – Manishh

+0

Ich bin ein Neuling in Schienen, so dass ich immer noch eine Menge zu kämpfen habe. Dies ist, was ich in meinem Job habe, zeigen Sie die Seite def-Show @ job = Job.find (params [: ID]) Ende. Die einfache Form ist in der neuen Seite Jobs und sollte nur auf die Show-Seite umleiten. –

Verwandte Themen