我有控制器:companies
和jobs
,公司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
?
非常感谢你的帮助。
您只需要更改您的路线,如下所示
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]
尝试使用浅嵌套?
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