小编Sch*_*ems的帖子

按年份,按月分组,然后在ActiveRecord 3中计数

我试图计算一年和一个月内创建的所有用户的数量,但以下似乎没有按预期工作.

User.group("YEAR(created_AT), MONTH(created_at)").
     count("DISTINCT(id), YEAR(created_at), MONTH(created_at)")
Run Code Online (Sandbox Code Playgroud)

我正在寻找类似的东西

{2011 => {1 => 222, 2 => 333, 4 => 444, 5 => 667 ... }}
Run Code Online (Sandbox Code Playgroud)

但我得到了

{1 => 222, 2 => 333, 4 => 444, 5 => 667 ... }
Run Code Online (Sandbox Code Playgroud)

我错过了什么,或者ActiveRecord不能在一个查询中给我这个结果?

ruby sql activerecord ruby-on-rails

9
推荐指数
1
解决办法
2014
查看次数

如何在Capybara测试中使用Rspec验证Warden/Devise

我想在我的Rails应用程序中的Capybara测试套件中使用rspec模拟来存根登录用户(使用Devise/Warden).这将节省大量时间,并且意味着我的测试套件可以/将定期运行.

以前我可以使用authlogic通过使用如下代码来截断我的会话模型来做到这一点:

def login(user)
  user_session = mock_model(UserSession, {:user => user})
  UserSession.stub(:find).and_return(user_session)
end
Run Code Online (Sandbox Code Playgroud)

现在我正在使用Devise,我再也无法访问UserSession对象了.因为我使用capybara来测试我的代码,所以我没有直接访问请求对象来使用devise的内置sign_in测试助手.

我的问题是:我如何使用水豚,设计和规范模拟模拟登录用户,而不需要每个具有登录用户的方案首先进入注册路径,填写表单,提交,等待响应,以及然后转到所需的页面?

ruby rspec ruby-on-rails devise capybara

9
推荐指数
1
解决办法
6485
查看次数

V8 Javascript堆转储架构

我正在尝试了解Google Chrome工具生成的heapdump的内容.我知道已有一个浏览器内堆转储检查器,但我有兴趣编写一个解析JS堆转储作为练习的CLI.我无法找到有关堆转储内容结构的任何文档.它们是人类可读的,但检查文件的格式不是很清楚

这是一个随机片段:

"HTMLOptionElement",
"XMLHttpRequestEventTarget",
"about:blank",
"clearModifier",
"resetModifiers",
"/devtools/docs/demos/memory/example1",
"HTMLIFrameElement",
"https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22search%22%2C%22version%22%3A%221.0%22%2C%22callback%22%3A%22__gcse.scb%22%2C%22style%22%3A%22https%3A%2F%2Fwww.google.com%2Fcse%2Fstyle%2Flook%2Fv2%2Fdefault.css%22%2C%22language%22%3A%22en%22%7D%5D%7D",
"HTMLLinkElement",
"HTMLContentElement",
"window.__SSR = {c: 1.2808007E7 ,si:1,su:1,e:'richard@example.com',dn:'Richard Schneeman',a:'bubble',at:'AZW7SXV+1uUcQX+2WIzyelLB5UgBepsr1\\/RV+URJxwIT6BmLmrrThMH0ckzB7mLeFn1SFRtxm\\/1SD16uNnjb0qZxXct8\\x3d',ld:[,[0,12808007,[]\n,1,70]\n]\n,r:'https:\\/\\/developer.chrome.com\\/devtools\\/docs\\/demos\\/memory\\/example1',s:'widget',annd: 2.0 ,bp: {}, id:'http:\\/\\/www.google.com\\/chrome'}; document.addEventListener && document.addEventListener('DOMContentLoaded', function () {gapi.inline.tick('wdc', new Date().getTime());}, false);",
"onLoaded",
"HTMLAllCollection",
"onDocumentKeyDown",
Run Code Online (Sandbox Code Playgroud)

是否存在关于chrome堆转储结构的文档?是否有标准的javascript堆转储格式或每个引擎都有自己的专有标准?

javascript v8 heap-dump google-chrome-devtools

9
推荐指数
1
解决办法
913
查看次数

以编程方式使用$&Global Variable的Alias方法

我正在尝试使用Ruby的特殊方法$&(返回上一个正则表达式匹配)的别名.我可以手动完成这个工作:

original = String.instance_method(:sub)
String.send(:define_method, :sub) do |*args, &block|
  puts "called"
  original.bind(self).call(*args, &block)
end
"foo".sub(/f/) { $&.upcase }
  called
  # => "Foo"
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试编写一个为我执行此操作的方法,它将失败:

def programatic_alias(klass, method_name)
  original = klass.instance_method(method_name)
  klass.send(:define_method, method_name) do |*args, &block|
    puts "called"
    original.bind(self).call(*args, &block)
  end
end

programatic_alias(String, :sub)
"foo".sub(/f/) { $&.upcase }
  called
  NoMethodError: undefined method `upcase' for nil:NilClass
  called
  called
  called
    from (irb):19:in `block in irb_binding'
Run Code Online (Sandbox Code Playgroud)

看起来全球状态受到programatic_alias方法范围的影响,但我不确定这是不是正在发生的事情.问题是:我如何以编程方式使用别名,String#sub以便它仍然适用于Ruby的特殊全局变量?

ruby metaprogramming global-variables

8
推荐指数
1
解决办法
395
查看次数

在Javascript中将yyyy-mm-dd转换为UTC

我需要使用javascript将yyyy-mm-dd中的日期(如2011-12-30)转换为UTC.怎么样?

javascript time date utc

7
推荐指数
1
解决办法
9311
查看次数

TravisCI允许两个元素的交叉点失败

使用Travis CI,我可以允许像Ruby 1.8.7这样的语言失败:

matrix:
  allow_failures:
    - rvm: 1.8.7
Run Code Online (Sandbox Code Playgroud)

我可以允许某些环境变量失败

matrix:
  allow_failures:
    - env: "RAILS_VERSION=master"
Run Code Online (Sandbox Code Playgroud)

我想要做的是允许环境变量和Ruby版本的交集失败.喜欢

matrix:
  allow_failures:
    - env: "RAILS_VERSION=master" && rvm: 1.8.7
Run Code Online (Sandbox Code Playgroud)

有可能用travis做到这一点吗?

travis-ci

7
推荐指数
1
解决办法
688
查看次数

Ruby on Rails link_to内部id

如果我想转到我可以使用的页面上的"whatever_id",我如何使用link_to来正常转到页面上的特定(html)ID

<a href="http://www.example.com/index/mypage#whatever_id>Click Here</a>
Run Code Online (Sandbox Code Playgroud)

但我想使用我的link_to

<%= link_to "click here" , {:action => "mypage", :controller => "index" }, :id => "#whatever_id"%> 
Run Code Online (Sandbox Code Playgroud)

辅助方法.有谁知道如何做到这一点?可能吗?

Rails 2.3.4

ruby ruby-on-rails link-to

6
推荐指数
1
解决办法
6772
查看次数

Rails:如何让created_at显示当前时区的时间?

似乎当我创建一个对象时,时间不正确.您可以通过下面的脚本/控制台输出看到.有没有人遇到这样的事情,或有任何调试技巧?

 >> Ticket.create(...)
=> #<Ticket id: 7, from_email: "foo@example.com", ticket_collaterals: nil, to_email: "foo2@example.com", body: "hello", subject: "testing", status: nil, whymail_id: nil, created_at: "2009-12-31 04:23:20", updated_at: "2009-12-31 04:23:20", forms_id: nil, body_hash: nil>
>> Ticket.last.created_at.to_s(:long)
=> "December 31, 2009 04:23"
>> Time.now.to_s(:long)
=> "December 30, 2009 22:24"
Run Code Online (Sandbox Code Playgroud)

time datetime ruby-on-rails

6
推荐指数
1
解决办法
8898
查看次数

Rails Asset Pipeline更好的错误或堆栈跟踪

刚刚将应用程序从rails 3.0.9升级到3.2.1,当我运行时bundle exec rake assets:precompile我得到错误,这很好但是回溯并没有告诉我在我的css或scss文件中语法问题来自哪里.我尝试greping"0ee5c0e69c92af0",但该字符串没有出现在我的项目中.

bundle exec rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets --trace
** Invoke assets:precompile:all (first_time)
** Execute assets:precompile:all
** Invoke assets:precompile:primary (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke tmp:cache:clear (first_time)
** Execute tmp:cache:clear
** Execute assets:precompile:primary
rake aborted!
Invalid CSS after "...0ee5c0e69c92af0": expected ";", was ".png;"
Run Code Online (Sandbox Code Playgroud)

有没有办法从预编译过程中获得更好的错误消息或堆栈跟踪?有没有其他方法可以编译我的css.erb文件来检查语法没有这个任务?

ruby ruby-on-rails ruby-on-rails-3 asset-pipeline

6
推荐指数
1
解决办法
1959
查看次数

发送Signal时运行代码,但不要在Ruby中捕获信号

我有一个在服务器上运行的代码,在服务器硬关闭之前,SIGTERM发送一个信号让我的代码知道它需要清理.我想在发生这种情况时运行代码并将信号发送回同一个程序,因此任何其他需要清理的代码都可以这样做.我不想捕获信号或改变信号行为,我只需要在程序的其余部分解释SIGTERM之前运行一些东西.

目前我可以做类似的事情

Signal.trap('TERM') do
  puts "Graceful shutdown"
  exit
end
Run Code Online (Sandbox Code Playgroud)

但是如果同一个应用程序中的多个代码试图做同样的事情,它就不起作用.例如:

Signal.trap('TERM') do
  puts "Graceful shutdown"
  exit
end

Signal.trap('TERM') do
  puts "Another graceful shutdown"
  exit
end
Run Code Online (Sandbox Code Playgroud)

您将只看到"Another graceful shutdown"并且第一个代码块将无法运行.

理想情况下,我可以通过以下方式调用当前行为:

Signal.trap('TERM') do
  puts "another graceful shutdown"
  super
end
Run Code Online (Sandbox Code Playgroud)

但这并不是出于显而易见的原因.所以问题是:当我得到一个SIGTERM没有捕获它并防止其他代码做同样的事情时,我如何运行代码?

ruby signals

6
推荐指数
1
解决办法
1111
查看次数