我在Rails 3项目中使用ActiveScaffold。我有一个产生默认 AS 视图的布局,配置方式如下:
layouts/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
这一切都工作正常。现在我想做的是传递并显示一个参数到布局/管理视图。
通常,在控制器操作@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 在我的控制器操作中使用默认视图?
找到合适的文档页面,这很简单:
def list_respond_to_html
@my_var = "test"
render :action => :list
end
默认情况下,ActiveScaffold 响应 html、json、js、xml 和 yaml mime。方法格式为<action>_respond_to_<format>