ruby-on-rails-3 - 在 Rails 3 查询中使用 count() 和 group(),还是只使用 sql?

标签 ruby-on-rails-3 activerecord

Rails 3 链式方法执行此类查询的方法是什么?

@jobs_by_location =
  Employer.find_by_sql ['SELECT count(j.id) AS job_count, e.* FROM employers e, jobs j' +
                        ' WHERE e.parent_id = ? AND j.employer_id = e.id' +
                        ' AND j.status = 2' +
                        ' GROUP BY e.id' +
                        ' ORDER BY e.state_id, e.city, e.name ASC', @employer.id]

我想出了:

@jobs_by_location = Employer
  .select('employers.*, count(jobs.id) as job_count').joins(:jobs)
  .group('employers.id').order('employers.state_id,employers.city,employers.name ASC')
  .where(:jobs => {:status => 2}).where(@employer.id)

我可以再收紧一点吗?我可以清理 order() 调用吗?我应该在某个地方使用 count() 吗?我应该打扰吗?谢谢。

最佳答案

在 order 子句中,您不需要指定表,除非列名不明确。你也许可以这样做

.order('state_id, city, name ASC')

另外,我认为你的意思是

 .where(:parent_id => @employer.id) # instead of .where(@employer.id)

除此之外,我认为你一切都很好。我认为 .count 对这种情况没有帮助。

关于ruby-on-rails-3 - 在 Rails 3 查询中使用 count() 和 group(),还是只使用 sql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4796759/

相关文章:

ruby-on-rails - rails 3 : How to display properly text from "textarea"?

ruby-on-rails - 设计 omniauth-facebook redirect_uri Url 必须是绝对的

ruby - Rails 3 - 通过 Controller 中的正则表达式检查字符串/文本是否包含某个单词/字符

ruby-on-rails - Ruby:使用字符串插值访问 ActiveRecord 属性

ruby-on-rails - 在 Rails 模型中重新定义 gem 方法不起作用

ruby-on-rails - 使用 ActiveRecord 进行条件链接

ruby-on-rails - 如何从在数据库中创建无用的 session 中排除 NewRelic RPM pinger

ruby-on-rails-3 - 如何在 Ruby on Rails 3 中允许从右到左的语言

ruby-on-rails - 如何让 Rails 获得急切的加载计数?

ruby-on-rails - rails : "Stack level too deep" error when calling "id" primary key method