代码之家  ›  专栏  ›  技术社区  ›  Boucherie

为Rails中的布局类实例变量选择控制器

  •  0
  • Boucherie  · 技术社区  · 7 年前

    我有一个DateTime类实例变量 @current_year = DateTime.now.year ,我已将其设置为页脚部分。此部分在我的几个客户端页面上呈现(并在多个控制器上呈现为 <%= render 'layouts/page_footer' %> 在页面主体中-布局/应用程序。html。erb页面是为站点导航保留的,因此其格式将无法容纳该页面。虽然我可以为它在控制器中出现的每个page方法声明它,但我会发现一些更枯燥的东西。是否有一个地方可以定义时间变量来调用布局组件?

    2 回复  |  直到 7 年前
        1
  •  1
  •   jvillian    7 年前

    能够 添加一个 set_year 在您的 ApplicationController ,类似于:

    class ApplicationController < ActionController::Base 
    
      private 
    
        def set_year 
          @current_year = DateTime.now.year
        end
    
    end
    

    然后在 before_action 在您的相关控制器操作中。类似于:

    class FooController < ApplicationController
      before_action :set_year, only: [:some_action, :another_action]
    end
    

    或者,你可以根据Yoshiji先生的评论,创建一个 current_year 中的操作 应用程序控制器 ,类似于:

    class ApplicationController < ActionController::Base
    
      def current_year
        @current_year ||= DateTime.now.year
      end
    
    end
    

    在这种情况下,您可以使用 当前\u年 在你的部分而不是 @current_year 。然后,正如Yoshiji先生所说,如果你的船上漂浮着这样的东西,你可以把它移到助手那里。类似于:

    module ApplicationHelper
    
      def current_year
        @current_year ||= DateTime.now.year
      end
    
    end
    

    我想搬家的好处是 当前\u年 成为助手的原因是它会消除 应用程序控制器 。我进一步认为,不利之处在于它(在某种程度上)阻碍了 当前\u年 行动同样,你必须考虑你的船的浮动系数。

    顺便提一下 @当前\u年 不是一个 DateTime 。这是一个 Fixnum

        2
  •  1
  •   jvillian    7 年前

    您可以在application\u helper中创建一个方法。rb文件 可以在任何你喜欢的地方使用。

    def current_year
      @current_year = DateTime.now.year
    end