小编hol*_*den的帖子

PostgreSQL GROUP BY与MySQL不同?

我一直在将一些MySQL查询迁移到PostgreSQL以使用Heroku.我的大多数查询工作正常,但当我使用group by时,我仍然遇到类似的重复错误:

错误:列"XYZ"必须出现在GROUP BY子句中或用于聚合函数

有人能告诉我我做错了什么吗?


MySQL 100%工作:

SELECT `availables`.*
FROM `availables`
INNER JOIN `rooms` ON `rooms`.id = `availables`.room_id
WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24')
GROUP BY availables.bookdate
ORDER BY availables.updated_at
Run Code Online (Sandbox Code Playgroud)


PostgreSQL错误:

ActiveRecord :: StatementInvalid:PGError:错误:列"availables.id"必须出现在GROUP BY子句中或用于聚合函数:
SELECT"availables".*FROM"availables"INNER JOIN"rooms"ON"rooms". id ="availables".room_id WHERE(rooms.hotel_id = 5056 AND availables.bookdate BETWEEN E'2009-10-21'EN'E'2009-10-23')GROUP BY availables.bookdate ORDER BY availables.updated_at


生成SQL的Ruby代码:

expiration = Available.find(:all,
    :joins => [ :room ],
    :conditions => [ "rooms.hotel_id = ? AND availables.bookdate BETWEEN ? AND ?", hostel_id, date.to_s, (date+days-1).to_s ], …
Run Code Online (Sandbox Code Playgroud)

mysql sql postgresql ruby-on-rails heroku

69
推荐指数
4
解决办法
3万
查看次数

将db从一个heroku应用程序转移到另一个更快

有没有更快的方法将我的生产数据库转移到测试应用程序?

目前我正在使用heroku db:pull我的本地机器,heroku db:push --app testapp但这变得非常耗时.我有一些种子数据,但它不如仅仅使用我的真实数据进行测试那么准确.既然它们都存储在相邻的AWS云中,那么必须有更快的方式来移动数据?

我想过使用heroku包,但是我注意到animate命令已经消失了?

bundles:animate <bundle>     # animate a bundle into a new app 
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails heroku

42
推荐指数
5
解决办法
1万
查看次数

用于rails中页面视图的简单计数器

我找到了几个解决这个问题的方法,比如这篇文章中的railstat:

Rails中的页面视图

我有一堆文章和评论,我想要一个由独特的IP过滤的计数器.完全像Stackoverflow为这篇文章做的.但是当谷歌分析已经为我做这个并且包括大量代码,跟踪独特的IP等时,我并不真正关心像railstat这样的解决方案.我现在的想法是使用Garb或其他一些分析插件可以提取页面统计数据,如果它们比12小时更新某​​些表格更早,但我还需要一个cache_column.

我假设您可以从Google Analytics中为特定页面提取统计信息,并且每12小时更新一次统计信息?

我想知道为什么这会是一个坏主意,或者有人有更好的解决方案?

谢谢

counter google-analytics ruby-on-rails google-api ruby-on-rails-3

37
推荐指数
1
解决办法
3万
查看次数

rails奇异资源还是复数吗?

我有一个搜索路线,我想做出单数,但当我指定一个单一的路线,它仍然制作多个控制器路线,这是它应该如何?

resource :search
Run Code Online (Sandbox Code Playgroud)

给我

 search POST        /search(.:format)        {:action=>"create", :controller=>"searches"}
 new_search  GET    /search/new(.:format)    {:action=>"new", :controller=>"searches"}
 edit_search GET    /search/edit(.:format)   {:action=>"edit", :controller=>"searches"}
             GET    /search(.:format)        {:action=>"show", :controller=>"searches"}
             PUT    /search(.:format)        {:action=>"update", :controller=>"searches"}
             DELETE /search(.:format)        {:action=>"destroy", :controller=>"searches"}
Run Code Online (Sandbox Code Playgroud)

多个控制器"搜索"

我只有一条路线......创建一个搜索:

所以我做了: match "search" => "search#create"

如果我仍然想让控制器复数,我只是想知道未来?Rails 3.0.9

routes ruby-on-rails singular custom-routes ruby-on-rails-3

37
推荐指数
4
解决办法
2万
查看次数

rails 3.1资产管道css缓存在开发中

我有点困惑,因为似乎application.css包含了两次,一次是它从清单中列出资源然后是缓存.因此,当我删除单个文件时,它似乎仍然在application.css文件中保持活着状态.

application.css(source)

/*
*= require twitter/bootstrap
*= require_self
*= require_tree ./common
*= require_tree ./helpers
*/
Run Code Online (Sandbox Code Playgroud)

它按预期工作,并以开发模式输出所有相关的单个文件

development.rb

  # Do not compress assets
  config.assets.compress = false

  # Expands the lines which load the assets
  config.assets.debug = true
Run Code Online (Sandbox Code Playgroud)

产量

<link href="/assets/twitter/bootstrap.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/application.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/common/announcement.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/common/button.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<Blah blah>
Run Code Online (Sandbox Code Playgroud)

application.css(输出)

这应该是空白的吗?因为我在application.css文件中的所有内容都是清单而没有实际的css,但我得到的所有连接代码都是106kb.

IE如果我删除公共目录中的文件,它不会消失.它不再列在输出中,但css仍然出现在application.css中

sass ruby-on-rails-3 ruby-on-rails-3.1 asset-pipeline

36
推荐指数
4
解决办法
2万
查看次数

使用delayed_job进行轮询

我有一个过程,通常需要几秒钟才能完成,因此我尝试使用delayed_job来异步处理它.工作本身运作正常,我的问题是如何轮询工作以确定是否已完成.

我可以通过简单地将它分配给变量来获取delayed_job的id:

job = Available.delay.dosomething(:var => 1234)

+------+----------+----------+------------+------------+-------------+-----------+-----------+-----------+------------+-------------+
| id   | priority | attempts | handler    | last_error | run_at      | locked_at | failed_at | locked_by | created_at | updated_at  |
+------+----------+----------+------------+------------+-------------+-----------+-----------+-----------+------------+-------------+
| 4037 | 0        | 0        | --- !ru... |            | 2011-04-... |           |           |           | 2011-04... | 2011-04-... |
+------+----------+----------+------------+------------+-------------+-----------+-----------+-----------+------------+-------------+
Run Code Online (Sandbox Code Playgroud)

但是一旦完成作业,它就会删除它,并且搜索完成的记录会返回错误:

@job=Delayed::Job.find(4037)

ActiveRecord::RecordNotFound: Couldn't find Delayed::Backend::ActiveRecord::Job with ID=4037

@job= Delayed::Job.exists?(params[:id])
Run Code Online (Sandbox Code Playgroud)

我是否需要改变这一点,并推迟删除完整的记录?我不知道我怎么能得到它的状态通知.或者正在查看死记录作为完成证明吗?其他人面对类似的事情?

ruby-on-rails backgroundworker push-notification delayed-job ruby-on-rails-3

33
推荐指数
4
解决办法
1万
查看次数

如何配置设计以使用自定义电子邮件布局?

当我说布局时我并不仅仅意味着视图,我生成那些.在我自己的邮件上,我正在使用默认布局.我在SomeMailer.rb文件中定义

#some_mailer.rb
class SomeMailer < ActionMailer::Base
  layout 'sometemplate'
Run Code Online (Sandbox Code Playgroud)

我是否可以通过某种方式为Devise Mailer等人做到这一点?

ruby-on-rails mailer devise ruby-on-rails-3

32
推荐指数
3
解决办法
1万
查看次数

如何防止Nokogiri添加<DOCTYPE>标签?

我最近注意到使用Nokogiri的一些奇怪的事情.我解析过的所有HTML都被赋予了开始和结束<html>以及<body>标签.

<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body>\n
Run Code Online (Sandbox Code Playgroud)

我如何防止Nokogiri这样做?

IE,当我这样做:

doc = Nokogiri::HTML("<div>some content</div>")
doc.to_s
Run Code Online (Sandbox Code Playgroud)

要么:

doc.to_html
Run Code Online (Sandbox Code Playgroud)

我得到原件:

<html blah><body>div>some content</div></body></html>
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails nokogiri

29
推荐指数
2
解决办法
5166
查看次数

摆脱不会死的红宝石宝石

我有一些不会消失的红宝石宝石.

我认为这与我安装它们时有关.偶尔我会忘记在进行gem安装之前使用"sudo",这会导致写入错误,并且我可以收集的内容会将gem的副本放在我的用户目录中,而不是它可以运行的某个地方.但是宝石卸载不起作用.它不断显示在'gem list'中,但不能从gem uninstall或sudo gem uninstall中卸载它.我在'gem environment'中找到路径后尝试直接删除一个gem,但仍然将gem留在列表中.

还可以删除所有宝石并从头开始吗?这些让我疯狂.

我正在运行OS X.

ruby rubygems ruby-on-rails

22
推荐指数
3
解决办法
2万
查看次数

对另一个查询的结果执行查询?

我有一个查询:

SELECT availables.bookdate AS Date, DATEDIFF(now(),availables.updated_at) as Age
FROM availables
INNER JOIN rooms
ON availables.room_id=rooms.id
WHERE availables.bookdate BETWEEN '2009-06-25' AND date_add('2009-06-25', INTERVAL 4 DAY) AND rooms.hostel_id = 5094
GROUP BY availables.bookdate
Run Code Online (Sandbox Code Playgroud)

返回的内容如下:

Date               Age
2009-06-25         0
2009-06-26         2
2009-06-27         1
2009-06-28         0
2009-06-29         0
Run Code Online (Sandbox Code Playgroud)

然后,我如何计算返回的行数...(在这种情况下为5)和年龄的和?使用Count和SUM返回一行?

Count         SUM
5             3
Run Code Online (Sandbox Code Playgroud)

谢谢

sql select aggregate sum count

21
推荐指数
2
解决办法
8万
查看次数