【问题标题】:Converting a rails 2 count calculation to rails 3将 rails 2 计数计算转换为 rails 3
【发布时间】:2011-02-05 03:01:22
【问题描述】:

我正在尝试将此 rails 2 计数计算转换为 rails 3,但我遇到了一些问题

answers.count('user_agents.browser', :joins => :user_agent, :group => 'user_agents.browser', :order => 'COUNT(user_agents.browser) DESC')

这是来自 rails 2 并给了我一个错误

PGError: ERROR:  column answers.user_agents.browser does not exist
LINE 1: SELECT     COUNT("answers"."user_agents.browser") AS "count_...
                         ^
: SELECT     COUNT("answers"."user_agents.browser") AS "count_user_agents_browser", user_agents.browser AS user_agents_browser FROM       "answers"  INNER JOIN "user_agents" ON "user_agents"."id" = "answers"."user_agent_id" WHERE     (answers.survey_id = 18) GROUP BY  user_agents.browser ORDER BY  COUNT(user_agents.browser) DESC

我已经尝试过转换自己,这是我得到的最接近的结果

answers.select('COUNT(user_agents.browser)').joins(:user_agent).group('user_agents.browser').order('COUNT(user_agents.browser) DESC')

但这仍然不起作用并给我这个错误

undefined method `keys' for [#<Answer >, #<Answer >, #<Answer >]:ActiveRecord::Relation

一些背景知识,我从我的问题模型中获得了一系列答案,该模型包含多个答案。 Answers 也属于拥有_many Answers 的UserAgent 模型。我的最终目标是获取一系列答案,并找出每个 UserAgent 有多少答案。此代码在 rails 2 中工作。我使用 Postgresql 作为数据库。

【问题讨论】:

  • 能不能试试用to_sql的方法看看实际的sql。例如puts answers.select('COUNT(user_agents.browser)').joins(:user_agent).group('user_agents.browser').order('COUNT(user_agents.browser) DESC').to_sql

标签: ruby-on-rails ruby-on-rails-3 postgresql


【解决方案1】:

我能够弄清楚,事实上我确实认为它更有意义

UserAgent.group(:browser).joins(:answers).merge(answers).count(:browser)

合并真是太棒了

【讨论】:

    猜你喜欢
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2023-03-28
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多