Очень хороший вопрос, и я удивлен, поскольку думал, что это очень распространенная задача в настоящее время, так что у меня будет достаточно ресурсов для этой проблемы, однако оказалось, что это не так.
Мои мысли заключаются в следующем: - Создать какой-то модуль, который имеет общую логику между контроллерами API и контроллерами HTML без возврата json или рендеринга html, и включить этот модуль как в контроллер HTML, так и в контроллер API, затем делайте что хотите, например:
module WebAndAPICommon
module Products
def index
@products = # do some logic here that will set @products variable
end
end
end
class ProductsController < ApplicationController
# default products controlelr, for rendering HMTL pages
include WebAndAPICommon
def index
super
end
end
module API
class ProductsController
include WebAndAPICommon
def index
super
render json: @products
end
end
end
Это нормально. Из документации :
Вы используете ключевое слово @synthesize для скажите компилятору, что он должен синтезировать сеттер и / или геттер методы для свойства, если вы не предоставить их в @implementation block.
То есть, если вы предоставите их, компилятор будет использовать ваши, независимо от директивы @synthesize.