gpt4 book ai didi

ruby-on-rails - 我怎样才能干掉所有这些调用来渲染 :index?

转载 作者:行者123 更新时间:2023-12-03 16:04:07 24 4
gpt4 key购买 nike

我有一堆带有呈现索引 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com