У меня есть контроллер, который будет серверные виджеты:как DRY a reply_to то же самое во всех действиях?
class WidgetsController < ApplicationController
def widget1
respond_to do |format|
format.html
format.js { render js: js_constructor }
end
end
def widget2
respond_to do |format|
format.html
format.js { render js: js_constructor }
end
end
private
def js_constructor
content = render_to_string(params[:action], layout: false)
"document.write(#{content.to_json})"
end
end
Этот контроллер получит больше, поэтому я хотел бы избежать повторения этого блока кода во всех действиях:
respond_to do |format|
format.html
format.js { render js: js_constructor }
end
Любая идея?
EDIT: просто чтобы дать некоторый контекст ...
Маршрут гибок/динамическая: get 'widgets/:action', to: 'widgets#:action'
Так что, если я посещаю widgets/widget1
будет оказывать вид widget1.html.erb
.
Если я включаю скрипт на другом сервере, он будет строить WIDGET1 там:
<script type='text/javascript' src='http://localhost:3000/widgets/widget1.js'></script>
Если нет буквально никакой разницы между виджетами, почему вы создаете несколько маршрутов для них? – Makoto
Каждое действие возвращает содержимое соответствующего вида. Существует только один гибкий маршрут ('get 'widgets /: action', to: 'widgets #: action''). Таким образом, html-формат используется для разработки, а js будет строить представление в другом месте ('') , – gabrielhilal
@Makoto: Я отредактировал свой вопрос, чтобы предоставить некоторый контекст. Надеюсь, теперь это ясно;) – gabrielhilal