Routes Rails 5如何将url从companys/:id/jobs/:id更改为jobs/:id

Routes Rails 5如何将url从companys/:id/jobs/:id更改为jobs/:id,routes,ruby-on-rails-5,Routes,Ruby On Rails 5,我有控制者:公司和工作,公司有很多工作,工作属于公司 现在我写routes.rb如下: resources :companies do member do post :star delete :unstar get :destroys get :jobs end resources :jobs,except: [:index] end resources :jobs,only: [:index] class Job

我有控制者:公司和工作,公司有很多工作,工作属于公司

现在我写routes.rb如下:

resources :companies do
    member do
      post :star
      delete :unstar
      get :destroys
      get :jobs
    end
    resources :jobs,except: [:index]
  end
  resources :jobs,only: [:index]
class JobsController < ApplicationController
  before_action :logged_in_user,except: [:index,:show]
  before_action :set_company,except: [:index]
  def index
    @jobs = Job.all
  end

  def show
    @job = Job.find(params[:id])
  end

  def new
    @job = Job.new
  end

  def create
    @job = Job.new(job_params)
    @job.taggables.build
    @job.company_id = @company.id
    respond_to do |format|
      if @job.save
        format.html {
          redirect_to company_jobs_path(@company)
          flash[:success] = "Success"
        }
      else
        format.html { render :new }
      end
    end

  end


  private

  def set_company
    @company = Company.find(params[:company_id])
  end

  def job_params
    params.require(:job).permit!
  end
end
我的作业\u controller.rb如下所示:

resources :companies do
    member do
      post :star
      delete :unstar
      get :destroys
      get :jobs
    end
    resources :jobs,except: [:index]
  end
  resources :jobs,only: [:index]
class JobsController < ApplicationController
  before_action :logged_in_user,except: [:index,:show]
  before_action :set_company,except: [:index]
  def index
    @jobs = Job.all
  end

  def show
    @job = Job.find(params[:id])
  end

  def new
    @job = Job.new
  end

  def create
    @job = Job.new(job_params)
    @job.taggables.build
    @job.company_id = @company.id
    respond_to do |format|
      if @job.save
        format.html {
          redirect_to company_jobs_path(@company)
          flash[:success] = "Success"
        }
      else
        format.html { render :new }
      end
    end

  end


  private

  def set_company
    @company = Company.find(params[:company_id])
  end

  def job_params
    params.require(:job).permit!
  end
end
我可以通过url获得公司的一份工作显示,如:

127.0.0.1:3000/公司/4/工作/1

但现在我只想通过id获取工作url,就像

127.0.0.1:3000/工作/1

如何编写routes.rb


非常感谢您的帮助。

您只需按以下方式更改路线即可


尝试使用浅嵌套

resources :companies do
  member do
    post :star
    delete :unstar
    get :destroys
    get :jobs # <= Are you sure this should be here?
  end
  resources :jobs, shallow: true # <= This is new
end

Rails文档中的链接:

我尝试了你的代码,然后我得到了一个错误:ActiveRecord::RecordNotFound-没有ID就找不到公司:app/controllers/jobs\u controller.rb:68:set\u Company'`,我该怎么办?非常感谢。@SylorHuang您需要将此操作前设置公司,除了:[:index]更改为操作前设置公司,除了:[:index,:show]非常感谢@帕万。