为 Rails 中的布局 class 实例变量选择控制器
Choosing a controller for a layout class instance variable in Rails
我有一个 DateTime class 实例变量 @current_year = DateTime.now.year
,我已将其设置为页脚部分。这个部分呈现在我的几个客户端页面上(并且跨多个控制器呈现为页面主体中的 <%= render 'layouts/page_footer' %>
- layout/application.html.erb 页面保留用于站点导航,因此格式不会在那里容纳它。虽然我可以为它出现在控制器中的每个页面方法声明它,但我会发现一些更干的东西。是否有一个地方我可以定义我的时间变量以在我的布局中调用组件?
您 可以 在 ApplicationController
中添加 set_year
操作,例如:
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
或者重复 MrYoshiji 的评论,您可以在 ApplicationController
中创建一个 current_year
动作,例如:
class ApplicationController < ActionController::Base
def current_year
@current_year ||= DateTime.now.year
end
end
在这种情况下,您可以在部分中使用 current_year
而不是 @current_year
。然后,正如 Yoshiji 先生所说,如果那种事情让你的船漂浮,你可以把它变成一个帮手。类似于:
module ApplicationHelper
def current_year
@current_year ||= DateTime.now.year
end
end
我想,将 current_year
转移到助手中的好处是它 de-clutters 你的 ApplicationController
。我进一步认为,缺点是它(在某种程度上)混淆了 current_year
操作的来源。同样,您必须考虑您的船漂浮系数。
顺便说一句,@current_year
不是 DateTime
。这是一个 Fixnum
.
您可以在 application_helper.rb 文件中创建一个方法
并在任何你喜欢的地方使用它。
def current_year
@current_year = DateTime.now.year
end
我有一个 DateTime class 实例变量 @current_year = DateTime.now.year
,我已将其设置为页脚部分。这个部分呈现在我的几个客户端页面上(并且跨多个控制器呈现为页面主体中的 <%= render 'layouts/page_footer' %>
- layout/application.html.erb 页面保留用于站点导航,因此格式不会在那里容纳它。虽然我可以为它出现在控制器中的每个页面方法声明它,但我会发现一些更干的东西。是否有一个地方我可以定义我的时间变量以在我的布局中调用组件?
您 可以 在 ApplicationController
中添加 set_year
操作,例如:
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
或者重复 MrYoshiji 的评论,您可以在 ApplicationController
中创建一个 current_year
动作,例如:
class ApplicationController < ActionController::Base
def current_year
@current_year ||= DateTime.now.year
end
end
在这种情况下,您可以在部分中使用 current_year
而不是 @current_year
。然后,正如 Yoshiji 先生所说,如果那种事情让你的船漂浮,你可以把它变成一个帮手。类似于:
module ApplicationHelper
def current_year
@current_year ||= DateTime.now.year
end
end
我想,将 current_year
转移到助手中的好处是它 de-clutters 你的 ApplicationController
。我进一步认为,缺点是它(在某种程度上)混淆了 current_year
操作的来源。同样,您必须考虑您的船漂浮系数。
顺便说一句,@current_year
不是 DateTime
。这是一个 Fixnum
.
您可以在 application_helper.rb 文件中创建一个方法 并在任何你喜欢的地方使用它。
def current_year
@current_year = DateTime.now.year
end