Routes Rails 5如何将url从companys/:id/jobs/:id更改为jobs/:id
我有控制者:公司和工作,公司有很多工作,工作属于公司 现在我写routes.rb如下: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
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]非常感谢@帕万。