热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RubyonRails的当前年份-CurrentyearinRubyonRails

HowcanIgetcurrentyearinRubyonRails?如何在RubyonRails中获得当前年份?Itriedavarietyofthings,

How can I get current year in Ruby on Rails?

如何在Ruby on Rails中获得当前年份?

I tried a variety of things, including

我尝试过各种各样的东西,包括

  • Date.current.year
  • Time.now.year

The problem is they return the previous year in cases where year changes after launching the server (eg. after new year's).

问题是,如果在启动服务器之后年份发生变化(例如新年之后),它们会在前一年返回。

Relevant code:

Model brewery.rb

class Brewery 

Problem occurs when creating a new brewery, so I assumed Date.today.year would be evaluated whenever that action takes place.

创建新啤酒厂时会出现问题,因此我假设每当该操作发生时都会评估Date.today.year。

4 个解决方案

#1


10  

In your example Date.today.year is evaluated only once - when the class is loaded and therefore doesn't change anymore.

在您的示例中,Date.today.year仅被评估一次 - 当类加载时因此不再更改。

When you use a lambda in your validator declaration then it re-evaluates the block each time when it runs the validation for that attribute:

在验证器声明中使用lambda时,每次运行该属性的验证时,它都会重新计算该块:

validates :year, numericality: { 
  only_integer: true, 
  less_than_or_equal_to: ->(_brewery) { Date.current.year }
}

Furthermore, I suggest using Date.current instead of Date.today, because the current method pays attention to timezone settings.

此外,我建议使用Date.current而不是Date.today,因为当前方法会关注时区设置。

#2


1  

Actually, it's better to use Time.current instead of Time.now in Rails, because the first one adopts current time zone. http://edgeguides.rubyonrails.org/active_support_core_extensions.html#time-current

实际上,最好在Rails中使用Time.current而不是Time.now,因为第一个采用当前时区。 http://edgeguides.rubyonrails.org/active_support_core_extensions.html#time-current

#3


1  

@spickermann's recipe seems to be correct, I'll just try to explain why it works.

@ spickermann的配方似乎是正确的,我只是试着解释它为什么有效。

The code you write inside your class is executed at compile time, when Ruby compiles to the VM bytecode. Therefore, the Date.today.year in your validator is calculated exactly once, when the class is compiled.

你在类中编写的代码是在编译时执行的,当Ruby编译为VM字节码时。因此,在编译类时,验证程序中的Date.today.year只计算一次。

By introducing the lambda you enable ActiveRecord to use the return value of said lambda. The lambda itself will be executed with each validation.

通过引入lambda,您可以使ActiveRecord使用所述lambda的返回值。 lambda本身将在每次验证时执行。

Hope that made the situation clearer!

希望使情况更加清晰!

#4


1  

<%= Time.zone.now.year %> -- factors in time zone

<%= Time.zone.now.year%> - 时区中的因素


推荐阅读
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 目录预备知识导包构建数据集神经网络结构训练测试精度可视化计算模型精度损失可视化输出网络结构信息训练神经网络定义参数载入数据载入神经网络结构、损失及优化训练及测试损失、精度可视化qu ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 解决针织难题:R语言编程技巧与常见错误分析 ... [详细]
author-avatar
aGreadyCat__895
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有