2017-12-29 20 views
0

Company_idを外部キーとして含むJobモデルがあります。これは私のネストされたルート[POST] "/ jobs"と一致するルートがありません

私の仕事で
resources :companies do 
    resources :jobs, only: [:show, :new, :create, :update, :destroy] 
    end 

新しいコントローラとメソッドを作成しているジョブの新しいページで、私はこの

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

のような簡単なフォームを使用して新しいジョブを作成したい、私は

を持っています
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 

これは、ジョブショーのページへのルート

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

との仕事は、ページ

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

を作成し、私は簡単なフォームを使用してジョブを作成しようとすると、以下のエラーを取得しておきます。

Noルートマッチ[POST] "/ジョブは、"

任意の助けいただければ幸いです。

答えて

1

あなたのネストされたルートを従えば、あなたは、コントローラのビューで

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 

でこの

は完全なURLを渡すので、どちらかを使用する前に検索会社のbefore action set companyを使用するジョブ 前companyを設定する必要が

<%= 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

の情報についてはhttp://guides.rubyonrails.org/action_controller_overview.html#filtersをチェックしていただきありがとうございます。私はデータベースと新しいジョブセーブをチェックしました。ジョブ表示ページにリダイレクトしようとすると、このエラーが発生します。{:action => "show"、:company_id => "13"、:controller => "jobs"}、 id]。これは作成アクションのリダイレクトです。 if @ job.save redirect_to company_job_path新しいジョブIDをルートに渡し、ジョブの表示ページにどのようにリダイレクトすることができますか。あなたの助けてくれてありがとう –

+0

@HakeemBaba 'もし@ job.save redirect_to company_job_path(@ company、@job)'、私はあなたのルートがネストされていると述べているので、すべてのルートで 'company_id'に渡す必要があります。ルート内のアクションには 'company_id'と' id'が必要です。それがあなたを助けたら助けてほしいと思っています。 – Gabbar

+0

@HakeemBabaあなたはまだこの問題に悩まされていますか? – Gabbar

2

<%= simple_form_for (@job) do |f| %>の代わりに<%= simple_form_for [@company, @job] do |f| %>を追加してください。フォームがレンダリングされるときに@companyが設定されているとします。

+0

私はまだ同じエラーが発生します。私はフォームがレンダリングされるとき@companyがセットされているというあなたの最後のコメントをよく理解していません。あなたは私にそれを明確にしてもらえますか? –

+0

@HakeemBabaあなたがショーページにいるとしたら、アクションショーで '@ company'を設定し、部分的に会社を確認する必要があります – Manishh

+0

私はまだ非常に苦労しているので、私はレールの初心者です。これは私が私の仕事ショーのページのdef def @ job = Job.find(params [:id]) endにあるものです。ジョブの新しいページのシンプルなフォームで、表示ページにリダイレクトする必要があります –

関連する問題