相关疑难解决方法(0)

当使用`average()`时,如何在AREL中使用`to_sql`?

我正在尝试从AREL获取SQL,但是在我使用的情况下它不起作用average(:stars):

这有效:

Review.where("reviewed_user_id = ?", self.reviewed_user_id).to_sql
#=> "SELECT `reviews`.* FROM `reviews` WHERE (reviewed_user_id = 3)"
Run Code Online (Sandbox Code Playgroud)

这导致NoMethodError:

Review.where("reviewed_user_id = ?", self.reviewed_user_id).average(:stars).to_sql
#=> undefined method `to_sql' for 3:Fixnum
Run Code Online (Sandbox Code Playgroud)

这意味着to_sql调用AREL的结果而不是AREL对象 - 但为什么呢?

如何获取生成的SQL?

activerecord ruby-on-rails-3

15
推荐指数
1
解决办法
7388
查看次数

在Rails 4中使用`CONCAT` w/Arel

我有一个User有模式first_namelast_name属性.使用Arel我想使用CONCAT.来执行全名搜索.我已经阅读了如何在ARel中使用像CONCAT()等函数的帖子?这给了我指示这是可能的,但我不能完全正确的语法.到目前为止我有

class User < ActiveRecord::Base
  def self.search(query)
    concat = Arel::Nodes::NamedFunction.new 'concat', [arel_table[:first_name], arel_table[:last_name]]
    where ...?
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails arel ruby-on-rails-4

9
推荐指数
2
解决办法
2419
查看次数

无法按命名函数的结果进行分组

NoMethodError: undefined method relation' for <Arel::Nodes::NamedFunction:0x7633>当我尝试按命名函数的结果进行分组时,我得到了。

class Appointment < ActiveRecord::Base
  scope :group_by_date, -> { group(date_column) }

  def self.date_column
    Arel::Nodes::NamedFunction.new(:date, [Appointment.arel_table[:start_time]], 'date')
  end
end

Appointment.group_by_date.count
# results in NoMethodError: undefined method `relation' for #<Arel::Nodes::NamedFunction:0x7633>
Run Code Online (Sandbox Code Playgroud)

这看起来完全合理,所以我不确定为什么会产生错误。我很确定这在早期版本的 Rails 中是可能的,如这个 SO 答案所示。

我期望得到类似于以下 sql 的内容:

SELECT date(appointments.start_time) AS date, COUNT(appointments.*) AS count
FROM appointments
GROUP BY date(appointments.start_time)
Run Code Online (Sandbox Code Playgroud)

有办法让它发挥作用吗?有没有办法将其转换Arel::Nodes::NamedFunctionArel::Attributes::Attribute

这显然是一个幼稚的解决方案尝试(它不起作用):

function = Arel::Nodes::NamedFunction.new('date', [Appointment[:start_time]])
attr = Arel::Attributes::Attribute.new(function)
Appointment.group(attr).to_sql
# NoMethodError: undefined method `table_alias' for #<Arel::Nodes::NamedFunction:0x4b8>
Run Code Online (Sandbox Code Playgroud)

我真的不想回到 using ,Appointment.group( …

ruby-on-rails arel ruby-on-rails-4

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