我有一堆带有呈现索引 View 的方法的 Controller 。这导致我写 render :index
在大多数方法的末尾。这是一个例子
def index
@models = Model.find(:all)
end
def new_models
@models = Model.find_by_new(true)
render :index
end
def old_models
@models = Model.find_by_new(false)
render :index
end
理想情况下,我只是将渲染代码移动到后过滤器中,但由于 Controller 在进入后过滤器之前调用渲染,这不是一个选项。
我有大量这样的 Controller ,因此解决方案将删除大量重复代码。
这个应用程序目前仍然是 Rails 2.3,但是,它将在接下来的一两个月内升级到 Rails 3。因此,虽然我更喜欢适用于 2.3 的技术,但仍会赞赏 Rails 3 唯一的解决方案。
最佳答案
如果你真的想干掉这个 Action ,如果它很常见,那么你可以自己做一些元编程。首先使用此模块定义创建一个 render_with_index.rb 文件:
模块 RenderWithIndex
def self.included 类
类.class_eval 做
def self.render_with_index * 方法
methods.each 做 |方法|
self.class_eval <<-EVAL
别名 :old_method :#{method}
def#{方法}
旧方法
渲染:索引
结尾
评估
结尾
结尾
结尾
结尾
结尾
然后将该模块包含在您的 Controller 中并定义应该使用索引呈现的方法(确保在您的方法声明之后发生 render_with_index 调用。
包括 RenderWithIndex
定义索引
@models = Model.find(:all)
结尾
def new_models
@models = Model.find_by_new(true)
结尾
def old_models
@models = Model.find_by_new(false)
结尾
render_with_index :new_models, :old_models
该模块现在允许您通过将索引模板添加到 render_with_index 调用来渲染任何操作。
关于ruby-on-rails - 我怎样才能干掉所有这些调用来渲染 :index?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4850329/