【发布时间】:2014-06-09 16:57:18
【问题描述】:
我想在所有站点(不同的控制器)上用Time.now 显示(服务器的)当前时间。
由于标题/导航栏等的全局显示可以在 layout>application.html.erb 中完成,我将其更改为以下内容:
<!DOCTYPE html>
<html>
<head>
<title>Depot</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
</head>
<body class='<%= controller.controller_name %>'>
<nav>
<%= link_to 'Store', controller: 'store', action:'index' %>
<%= link_to 'Products', controller: 'products', action: 'index' %>
<span>Current time: <%= @time %></span>
<%= yield %>
</body>
</html>
现在我进一步希望在 application_controller.rb 中添加代码以获取当前时间。 这是我在里面的代码
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
@time = Time.now
end
不幸的是,这不起作用,我必须在我正在使用的控制器(和方法)中添加 @time = Time.now - 代码。这意味着我必须多次填写代码,这不是违反规范吗?想法?
如果有任何帮助,我将不胜感激:)
【问题讨论】:
-
也许你想要一个助手是所有视图都可以访问的?如果这不是您熟悉的内容,我可以为您提供更多信息,为您指明正确的方向。冰人的回答也很好(他提交的时候我正在写我的)。
-
不,到目前为止我对助手不是很熟悉。如果您能将我推向正确的方向,我将不胜感激。
-
就像我说的,我认为 Iceman 的回答非常适合这个问题,但你应该熟悉 helpers。我会看看这个 (stackoverflow.com/questions/18775055/…) 让您快速了解语法。基本上,帮助程序是使方法可用于视图的一种方式。 Iceman 的方法使用
before_action(或在前 Rails 4.x 代码中的before_filter)在控制器操作之前运行代码,在这种情况下可能更合适。
标签: ruby-on-rails ruby time global