Helper方法用于虚拟属性的时间转换。
module Admin::TimeFormatsHelper
# hh:mm:ss => seconds
def forward_time_convert(time_virtual)
time_collect = time_virtual.split(":")
time_collect[0].to_i*3600 + time_collect[1].to_i*60 + time_collect[2].to_i
end
# seconds => hh:mm:ss
def reverse_time_convert(time_real)
time_real = time_real.to_i
return "00:00:00" if time_real == 0
time_collect = {}
time_collect[:second]= keep_in_type(time_real%60)
time_collect[:minute]= keep_in_type((time_real/60)%60)
time_collect[:hour]= keep_in_type(time_real/3600)
return "#{time_collect[:hour]}:#{time_collect[:minute]}:#{time_collect[:second]}"
end
end
model使用示例
class TimeEntry < ActiveRecord::Base
include Admin::TimeFormatsHelper
def spend_time_virtual
reverse_time_convert(self.spend_time)
end
def spend_time_virtual=(time_virtual)
self.spend_time = forward_time_convert(time_virtual)
end
end
ui上使用的js. 附带了form lock。 当用户输入错误时锁死form。
// Auto convert time format like 1 => 00:01:00, 61 => 01:01:00, "character except [0-9] and ':'" => error.
// Prevent form submit if there is any error in it.
function auto_time_convert(obj){
// Check if obj.value have unaccepted character. return error or continue. ":" max size is 2. overage should return error
var accepted_character = new RegExp("^\\d+\\:?\\d*\\:?\\d*$", "g");
if(accepted_character.test(obj.value)){
// if there no ":" in obj.value means the value unit is minute
// if obj.value like "2:3" means it's 2 minutes 3 seconds
// 100:00:00 => 100:00:00, 10:70:70 => 11:11:10
var standard_format_time = "";
var time_array = String(obj.value).split(":");
switch(time_array.length){
case 1:
minutes = Number(time_array[0]);
standard_format_time = time_convert(minutes*60);
break;
case 2:
minutes = Number(time_array[0]);
seconds = Number(time_array[1]);
standard_format_time = time_convert(minutes*60 + seconds);
break;
case 3:
hours = Number(time_array[0]);
minutes = Number(time_array[1]);
seconds = Number(time_array[2]);
standard_format_time = time_convert(hours*3600 + minutes*60 + seconds);
break;
}
obj.value = standard_format_time;
$(obj).removeClass("error_input");
// Check if there is any error input field in form
if($(".time_convert_area input.error_input").length == 0){
$("#form_lock").val("");
}
}else{
$(obj).addClass("error_input");
$("#form_lock").val("lock");
}
}
function time_convert(total_seconds){
var time_collect = [];
time_collect[0]= keep_in_type(parseInt(total_seconds/3600));
time_collect[1]= keep_in_type(parseInt((total_seconds/60)%60));
time_collect[2]= keep_in_type(parseInt(total_seconds%60));
return time_collect.join(":");
}
function keep_in_type(quantity){
if (String(quantity).length >= 2){
return quantity;
}else{
return "0" + quantity;
}
}
function is_form_lock(){
if($("#form_lock").val() == ""){
return true;
}else{
return false;
}
}
分享到:
相关推荐
在Rails开发中,为了增强用户体验,常常需要使用JavaScript来处理日期选择和管理。这篇博客“rails中使用javascript日期控件”探讨的就是如何在Rails应用中集成JavaScript日期控件,特别是通过一个名为WebCalendar....
标题 "Rails3-使用ajax处理并发" 涉及的是在Ruby on Rails 3框架中如何利用Ajax技术处理并发请求。Rails是一个流行的Web应用程序开发框架,它基于Ruby语言,而Ajax(Asynchronous JavaScript and XML)则是一种允许...
例如,要在Rails应用中创建一个新的资源,如博客文章,你需要在models目录下创建一个名为`post.rb`的文件,定义Post类,并设置属性如标题和内容。在controllers目录下创建`posts_controller.rb`,定义控制器方法,如...
在本篇内容中,我们将深入探讨如何利用Ruby on Rails(简称Rails)这一强大的Web应用程序框架来构建可伸缩且易于维护的RESTful API。Rails以其简洁优雅的语法、高效的开发速度以及良好的社区支持而闻名,这使得它...
Webpacker是Ruby on Rails框架中一个非常重要的工具,它允许开发者使用Webpack来管理和打包应用程序中的JavaScript模块。Webpacker的引入,使得Rails应用可以利用Webpack的强大功能,如模块化、热加载、代码分割和树...
### 使用RSpec 测试Rails 程序的知识点总结 #### 一、RSpec与Rails结合的基础概念 **RSpec**(RSpec is not a unit testing framework)是一种为Ruby编程语言设计的行为驱动开发(BDD)框架,而**Rails**是基于...
9. **ActiveJob**:Rails的后台任务处理框架,可以配合各种队列服务(如Resque、Sidekiq等)处理异步任务。 10. **Rails Console**:提供了一个交互式的命令行工具,用于检查和调试应用,执行Ruby代码,以及与...
这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...
这个工具简化了在Rails项目中使用Go进行后端处理的流程,使开发者可以利用Go的性能优势处理高并发请求,同时保留Rails的便捷开发体验。 ### 2. 安装`GoOnRails` 首先,确保你的系统已经安装了Rails和Go。接下来,...
Ruby on Rails:Rails中的表单处理.docx
klog2, 使用 Rails4 & angular.js 创建的博客应用程序 Klog使用 Rails 4.x 和 Angular.js 创建的博客应用程序屏幕截图 更多截图我的博客地址 http://chaoskeh.com演示版地址 http://klog-
8. **安全考虑**:Rails API通常需要与OAuth2、JWT(JSON Web Tokens)或其他身份验证机制配合,以确保API的安全性。 9. **Rate Limiting**:防止恶意用户或脚本滥用API,Rails API可以通过中间件(如Rack::Attack...
Asset Pipeline优化了前端资源的处理,Cucumber-Rails则提供了强大的测试工具,确保代码的质量和功能符合业务需求。这样的组合对于保持代码的整洁、提高团队协作效率和降低维护成本具有重要意义。 总的来说,了解和...
最后,Rails API的应用往往需要与前端框架如React、Vue.js或Angular配合,通过前端路由和状态管理工具构建单页应用(SPA),以提供更好的用户体验。 总的来说,Rails API 提供了一套完整的框架,用于构建高效、易于...
Rails3 是 Ruby on Rails 框架的一个版本,它在2010年发布,引入了许多新特性并改进了框架的性能。Rake 是 Ruby 的一个构建工具,类似于 Java 的 Ant 或者 Python 的 setup.py,它允许开发者用自然语言定义任务,并...
《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...
Rails 4中的Asset Pipeline进行了优化,提升了静态资源如CSS、JavaScript的处理速度。这个功能允许开发者合并、压缩和版本化静态资源,以减少HTTP请求并提高页面加载速度。 6. **Strong Parameters** 为了解决...
从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...