加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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调用即可.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读