2016-03-16 2 views
0

У меня есть проект Rails, который имеет часть api и обычный. У них есть некоторые общие методы, например, у меня есть два контроллера, как так:Возможно ли высушить тот же метод в двух разных контроллерах?

class PlacementController < ApplicationSafeController 

    def zip 
    file = ZipService::ZipGenerator.create_zip 
    send_data(file.read, type: 'application/zip') 
    File.delete(file.path) 
    end 
end 

и

class Api::ZipsController < ApiController 

    def single_zip 
    file = ZipService::ZipGenerator.create_zip 
    send_data(file.read, type: 'application/zip') 
    File.delete(file.path) 
    end 
end 

И как мой ApiController и ApplicationSafeController наследоваться от ApplicationController. Мой вопрос в том, что это лучший способ очистить это, не загрязняя корень ApplicationController? (добавив там новый метод). Благодаря!

ответ

1

Вам нужен модуль для обсуждения кода. Включите совместно используемый код в модуле, затем включите этот модуль в нужные контроллеры. Это рубиновый способ сделать это.

module Zippable 
    def zip 
    file = ZipService::ZipGenerator.create_zip 
    send_data(file.read, type: 'application/zip') 
    File.delete(file.path) 
    end 
end 

class PlacementController < ApplicationSafeController 

    include Zippable 

    #Example Usage 
    def show 
    zip 
    end 
end 

class Api::ZipsController < ApiController 

    include Zippable 
end 
+0

Я думаю, моя проблема в том, что send_data происходит из ApplicationController. Я попытался сделать что-то подобное, у вас есть только уроки вместо send_data, а затем передать send_data через блок, но он казался немного сумасшедшим – Ingo