【问题标题】:Display current time globally with Ruby on Rails使用 Ruby on Rails 全局显示当前时间
【发布时间】: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


【解决方案1】:

在应用程序控制器中

before_action :set_time

def set_time
  @time = Time.now
end

现在您可以随时随地使用@time

【讨论】:

  • 谢谢!这正是我一直在寻找的! :)
猜你喜欢
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
相关资源
最近更新 更多