ruby-on-rails – 如何干掉所有这些调用来渲染:index?
发布时间:2020-12-17 03:19:38 所属栏目:百科 来源:网络整理
导读:我有一堆控制器,其方法可以呈现索引视图.这导致我在大多数方法结束时编写render:index.这是一个例子 def index @models = Model.find(:all)enddef new_models @models = Model.find_by_new(true) render :indexenddef old_models @models = Model.find_by_n
我有一堆控制器,其方法可以呈现索引视图.这导致我在大多数方法结束时编写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 理想情况下,我只是将渲染代码移动到后置滤镜中,但是在进入后置滤镜之前,控制器会调用渲染,而不是选项. 我有这么多的控??制器,所以一个解决方案将删除大量重复的代码. 这个应用程序目前仍然是Rails 2.3,但是,它将在下个月或两个月升级到Rails 3.因此,虽然我更喜欢一种适用于2.3的技术,但Rails 3仍然只能使用Rails解决方案. 解决方法
如果你真的想要干掉这个动作,如果它很常见,那么你可以做一些你自己的元编程.首先使用此模块定义创建render_with_index.rb文件:
module RenderWithIndex def self.included klass klass.class_eval do def self.render_with_index * methods methods.each do |method| self.class_eval <<-EVAL alias :old_method :#{method} def #{method} old_method render :index end EVAL end end end end end 然后在控制器中包含该模块并定义应使用index呈现的方法(确保在方法声明之后发生render_with_index调用. include RenderWithIndex def index @models = Model.find(:all) end def new_models @models = Model.find_by_new(true) end def old_models @models = Model.find_by_new(false) end render_with_index :new_models,:old_models 此模块现在允许您使用索引模板呈现任何操作,只需将其添加到render_with_index调用即可. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |