为了保持restfull协议,我需要Reports
。
在rails中,父控制器 - 我有:
/api/backup_jobs/777/errors
子控制器中的:
module Api
class BackupJobsController < ApplicationController
respond_to :json
def show
@backup_job = @backup_jobs.find(params[:id])
respond_with data: @backup_job
end
end
end
但是obvisouley这不起作用,因为module Api
class ErrorsController < BackupJobsController
respond_to :json
def index
respond_with data: @backup_jobs.find(params[:id]).backup_events.errors
end
end
end
不存在params[]
/api/backup_jobs/777/errors
从父控制器的@backup_job = @backup_jobs.find(params[:id])
传递给子控制器,并让它可以在孩子def show
中访问? 答案 0 :(得分:1)
你不能这样做,因为当创建和使用ErrorsController时,你将没有在它之前运行的BackupsJobsController。
这归结为HTTP作为请求 - 响应协议的本质。
相反,您可以将编写的代码行提取到将由ErrorsController继承的方法中。
<强> backup_jobs_controller.rb 强>:
module Api
class BackupJobsController < ApplicationController
def show
find_backup_job
respond_with data: @backup_job
end
protected
def find_backup_job
@backup_job = @backup_jobs.find(params[:id])
# or maybe @backup_job = BackupJob.find(params[:id])
end
end
end
<强> errors_controller.rb 强>:
module Api
class ErrorsController < BackupJobsController
respond_to :json
def index
respond_with data: find_backup_job.backup_events.errors
end
protected
def find_backup_job
@backup_job = BackupJob.find(params[:backup_job_id])
end
end
end