我有一个在Rails 4.1.1应用程序中使用的模块
module A
extend ActiveSupport::Concern
included do
#Some code
end
end
Run Code Online (Sandbox Code Playgroud)
它包含在一个类中
class Some
include A
end
Run Code Online (Sandbox Code Playgroud)
这与伟大工程cache_classes=true在application.rb.现在,如果我关闭类的缓存,我会Cannot define multiple 'included' blocks for a Concern (ActiveSupport::Concern::MultipleIncludedBlocks)在启动服务器时获得异常upson.
由于重新加载类是由Rails完成的,应该如何处理这样的问题?
如何在给定日期的IRB中创建新的Date对象.以下不起作用.
1.9.3p194 :053 > require 'active_support'
=> true
1.9.3p194 :054 > Date.new
=> #<Date:0x9d80730>
1.9.3p194 :055 > Date.parse('12/01/2012')
NoMethodError: undefined method `parse' for Date:Class
from (irb):55
1.9.3p194 :055 > Date.new('12/01/2012')
ArgumentError: wrong number of arguments(1 for 0)
Run Code Online (Sandbox Code Playgroud) Rails的ActiveSupport模块使用许多方法扩展了内置的ruby Time类.
值得注意的是,有一种to_formatted_s方法,它允许您编写Time.now.to_formatted_s(:db)以获取数据库格式的字符串,而不是必须在strftime任何地方编写丑陋的格式字符串.
我的问题是,有没有办法倒退?
类似于Time.parse_formatted_s(:db)解析数据库格式的字符串,返回一个新的Time对象.这似乎是rails应该提供的东西,但如果是,我找不到它.
我只是无法找到它,或者我是否需要自己编写?
谢谢
有些书中提到的一些宝石与装饰数字#days,#megabytes,#minutes等等.这是只有在的ActiveSupport,还是有提供此功能用于(小)无轨宝石小宝石?我想在一个小小的宝石中使用这个功能作为DSL的一部分.
如何将作为TZInfo标识符接收的js值转换为Rails TimeZone名称/密钥?
FROM:"America/New_York"从JavaScript TZinfo检测
TO 返回
:"Eastern Time (US & Canada)"Rails TimeZone中使用的约定
或者另一个例子:
"Pacific/Honolulu"=>转换为=>"Hawaii"
两者都可用于ActiveSupport::TimeZone < Object映射,但rails "Eastern Time (US & Canada)"在下拉列表,验证和存储中使用键[ig ] Time.use_zone().
根据我的理解,ActiveSupport::TimeZone.us_zones这似乎是重要的,特别是DayLights节省时间(轨道声音处理得好)和只匹配偏移不会完成.如果没有使用rails TimeZone名称存储到DB,则验证将失败,并且在用户的配置文件设置页面中与下拉列表无法正确匹配ActiveSupport::TimeZone.zones_map
这样做的目的是用户不必在注册时选择他们的时区,或者在注册后需要在他们的设置中更改它们.浏览器检测到它并在注册时将其传递给hidden_field.在极少数情况下,他们在与家庭/工作不同的地方注册.他们可以稍后在其帐户设置中手动覆盖.
在尝试摄取js时区检测时似乎是一个常见的差距.这甚至可能成为如何将返回的信息从js传递给rails进行转换然后返回js以存储回表单的hidden_field的次要问题?希望我能正确地解决这个问题,并且确实有点使用rails的绿色,所以可能有一个简单的解决方案......
非常感谢所有的帮助!
-E
ActiveSupport Time.zone文档
http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-i-parse
MAPPING = {"Eastern Time (US & Canada)" => "America/New_York"
Run Code Online (Sandbox Code Playgroud)
使用js打包gem'temporal-rails'来检测用户时区:https:
//github.com/jejacks0n/temporal
用户Time_Zone实现如下:http://railscasts.com/episodes/106-time-zones-revised
*使用设计和设计 - 不可避免
<script>
$(function() {
var detected_zone = Temporal.detect();
console.log(detected_zone); // returns object
detected_zone = detected_zone.timezone.name; …Run Code Online (Sandbox Code Playgroud) 我有一个rails应用程序的默认时区设置.和Date对象的一个实例.
如何让Date#beginning_of_day返回指定时区内的一天的开头,而不是我当地的时区.
是否有其他方法可以在给定日期的指定时区内开始白天时间?
date = Date.new(2014,10,29)
zone = ActiveSupport::TimeZone.new('CET')
date.foo(zone) # should return "Wed, 29 Oct 2014 00:00:00 CET +01:00"
zone = ActiveSupport::TimeZone.new('UTC')
date.foo(zone) # should return "Wed, 29 Oct 2014 00:00:00 UTC +00:00"
Run Code Online (Sandbox Code Playgroud) irb(main):001:0> require 'active_support'
=> true
irb(main):002:0> require 'active_support/inflector/inflections'
=> true
irb(main):003:0> ActiveSupport::Inflector.pluralize('test')
=> "test"
irb(main):004:0> ActiveSupport::Inflector.singularize('tests')
=> "tests"
irb(main):005:0> ActiveSupport::Inflector.titleize('hat simulator')
=> "Hat Simulator"
<ort::Inflector.tableize("america's number one hat simulator")
=> "america's number one hat simulator"
Run Code Online (Sandbox Code Playgroud)
嗯,基本上,这就是问题所在.让我感到困惑的是,方法titleize似乎工作正常,但是tableize,pluralize并且singularize没有.
我忘了要求什么吗?
(在另一个注释中,我注意到这个页面提供了一些例子"post".pluralize,当我尝试时,会产生NoMethodError: undefined method 'pluralize' for "post":String这样的结果.但也许这可以为另一个问题保存.)
我只是尝试travel在我的一个功能规范中使用Rails的时间助手方法:
scenario 'published_at allows to set a publishing date in the future' do
magazine_article.update_attribute(:published_at, Time.now + 1.day)
expect { visit magazine_article_path(magazine_article.magazine_category, magazine_article) }
.to raise_error(ActiveRecord::RecordNotFound)
travel 2.days do
visit magazine_article_path(magazine_article.magazine_category, magazine_article)
expect(page).to have_content('Super awesome article')
end
end
Run Code Online (Sandbox Code Playgroud)
它给了我这个:
NoMethodError:
undefined method `travel' for #<RSpec::ExampleGroups::MagazineArticles::AsUser::Viewing:0x007f84a7a95640>
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
http://api.rubyonrails.org/classes/ActiveSupport/Testing/TimeHelpers.html
rspec ruby-on-rails activesupport ruby-on-rails-4 ruby-on-rails-5
我有一个在Sinatra建立的投资组合网站.我有一段时间没有工作过,一直在做一些Rails.我昨天通过运行'gem update'更新了我的宝石列表.我不知道这是否与此有关,但我今天再次开始在投资组合网站上工作,我一直在收到一些弃用警告.
弃用警告:ActiveSupport :: Concern中的InstanceMethods模块将不再自动包含在内.请直接在Work中定义实例方法.(来自/Users/joris/Desktop/sinatra/portfolio/models/work.rb:2中包括)
我不知道如何解决这个问题,当我运行应用程序时,它不再起作用了..转到我的路线只返回Sinatra 404页面.(另外,Rails不是ActiveSupport的一部分吗?为什么会出现在我的Sinatra应用程序中......)
它在错误中提到的文件是work.rb:
class Work
include MongoMapper::Document
key :title, String
key :url, String
key :filename, String
key :file, String
key :description, String
timestamps!
end
Run Code Online (Sandbox Code Playgroud)
这是我的主文件(portfolio.rb):
require "sinatra"
require 'twitter'
require 'RedCloth'
require 'html_truncator'
require 'digest/md5'
class Portfolio < Sinatra::Application
require_relative 'config/init'
require_relative 'helpers/init'
require_relative 'models/init'
require_relative 'routes/init'
Run Code Online (Sandbox Code Playgroud)
模型init文件(调用work.rb文件)具有以下内容:
require 'mongo_mapper'
MongoMapper.connection = Mongo::Connection.new('lalaland.com', 10070)
MongoMapper.database = 'hello'
MongoMapper.database.authenticate('lalala', 'hello')
require_relative 'post'
require_relative 'work'
Run Code Online (Sandbox Code Playgroud)
编辑:刚刚看到我也得到它 models/post.rb
弃用警告:ActiveSupport :: Concern中的InstanceMethods模块将不再自动包含在内.请直接在Post中定义实例方法.(来自/Users/joris/Desktop/sinatra/portfolio/models/post.rb:2中包括)
如果我只有像曼谷或东京这样的城市名称,我怎样才能[NSTimeZone timeZoneWithName:@"Asia/Tokyo"]在城市前面的大陆和斜线上提供时区参数
?
我已经尝试过[NSTimeZone timeZoneWithName:@"Tokyo"],它不起作用.
activesupport ×10
ruby ×5
timezone ×3
date ×2
datetime ×1
deprecated ×1
ios ×1
nstimezone ×1
numeric ×1
parsing ×1
rspec ×1
rubygems ×1
sinatra ×1
time ×1
tzinfo ×1