Передать дополнительные параметры в представление ActiveScaffold
Я использую ActiveScaffold в проекте Rails 3. У меня есть макет, который дает вид AS по умолчанию, настроенный следующим образом:
макеты /admin.html.erb
<%= render :partial => "layouts/admin_header" %>
[some html]
<%= yield %>
[more html]
<%= render :partial => "layouts/admin_footer" %>
Затем я использую BaseController, который отображает этот макет
class Admin::BaseController < ApplicationController
[some global settings / restrictions]
layout "admin"
end
Теперь, в моем специфичном для модели контроллере, я просто использую:
class Admin::UsersController < Admin::BaseController
active_scaffold :user do |config|
config.columns[:id].label = "#"
[more config]
end
def conditions_for_collection
[setting some conditions]
end
end
Вот и все работает нормально. Теперь то, что я хотел бы сделать, это передать и отобразить параметр в представлении Layouts/ Admin.
Обычно достаточно установить переменную экземпляра в действии контроллера @my_var = params[:some_param]
, но действие контроллера находится внутри AS. Если я установлю его где-то еще, он не будет передан на просмотр. Поэтому я попытался реализовать действие контроллера (я хочу изменить отображение действия со списком пользователей):
def list
@my_var = "test"
render :active_scaffold => "users"
end
Я надеялся, что AS сможет использовать представление по умолчанию для отображения списка с render :active_scaffold => "users"
, но, к сожалению, это не работает, я получаю
ActionView::MissingTemplate
Missing template admin/users/index, admin/base/index, application/index, active_scaffold_overrides/index with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :haml]}
Если я опускаю вызов рендеринга, я получаю тот же результат. Поэтому мой вопрос: как я могу передать параметр без перезаписи метода контроллера или дать команду AS использовать представление по умолчанию в моем действии контроллера?
1 ответ
Это довольно просто, если вы найдете нужную страницу документа:
def list_respond_to_html
@my_var = "test"
render :action => :list
end
По умолчанию ActiveScaffold отвечает на запросы html, json, js, xml и yaml. Формат метода <action>_respond_to_<format>