2015-07-30 4 views
1

Чтобы поддерживать протокол restfull, мне нужно сделать /api/backup_jobs/777/errors.Rails передать значение/объект/orm от родительского контроллера к дочернему

В рельсах, родительский контроллер- у меня есть:

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 

в контроллере ребенка:

module Api 
    class ErrorsController < BackupJobsController 
    respond_to :json 

    def index 
     respond_with data: @backup_jobs.find(params[:id]).backup_events.errors 
    end 
    end 
end 

Но obvisouley это не будет работать, потому что params[] не существуют для /api/backup_jobs/777/errors

  1. Как передать @backup_job = @backup_jobs.find(params[:id]) из родительского контроллера def show в дочерний контроллер и сделать его доступным в def index ребенка?

ответ

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 
+0

как бы я сказать ему, что работа, чтобы найти, если 'контроллер errors' не имеет параметров? помните, что URL-адрес: '/ api/backup_jobs/777/errors' – dman

+0

См. мой отредактированный ответ. –

Смежные вопросы