Rails 5如何将公司/:id / jobs /:id中的URL更改为jobs /:id

问题描述 投票:0回答:2

我有控制器:companiesjobs,公司has_many工作,工作belongs_to公司。

现在我像这样写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]

我的jobs_controller.rb是这样的:

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

我可以通过网址获得公司的一份工作展示,例如:

"127.0.0.1:3000/companies/4/Jobs/1"

但现在我只想通过id得到工作网址,就像

"127.0.0.1:3000/Jobs/1"

我怎么能写routes.rb

非常感谢你的帮助。

routes ruby-on-rails-5
2个回答
1
投票

您只需要更改您的路线,如下所示

resources :companies do
  member do
    post :star
    delete :unstar
    get :destroys
    get :jobs
  end
  resources :jobs,except: [:index, :show]
end
resources :jobs,only: [:index, show]

0
投票

尝试使用浅嵌套?

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文档中:https://edgeguides.rubyonrails.org/routing.html#shallow-nesting

© www.soinside.com 2019 - 2024. All rights reserved.