Rails将值/对象/ orm从父控制器传递给子控制器

时间:2015-07-30 21:07:27

标签: ruby-on-rails model-view-controller

为了保持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[]

  1. 如何将/api/backup_jobs/777/errors从父控制器的@backup_job = @backup_jobs.find(params[:id])传递给子控制器,并让它可以在孩子def show中访问?

1 个答案:

答案 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