没有路线匹配[POST]“/ jobs”

时间:2017-12-29 10:25:03

标签: ruby-on-rails ruby

我有一个包含Company_id作为外键的Job模型。在Job新页面上,我想使用像这样的简单表单创建一个新作业

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

这是我的嵌套路线

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

在我的jobs controller new和create方法中,我有

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

当我尝试使用简单表单创建作业时,我一直收到以下错误。

没有路线匹配[POST]“/ jobs”

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

只需添加<%= simple_form_for [@company, @job] do |f| %>而不是<%= simple_form_for (@job) do |f| %>我假设您在呈现表单时设置了@company。

答案 1 :(得分:1)

根据您的嵌套路线,您需要在作业前设置UiModeManager#getCurrentModeType() 所以要么在使用此

之前使用查找公司的company 控制器中的

before action set company

在视图中传递完整网址

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