Arel gem:rails 中的 where 子句中缺少 "SELECT *"

Arel gem: "SELECT *" missing from where clause in rails

我到处寻找这个问题的答案,显然全世界都没有人遇到过这个问题。我正在使用这些宝石:

ruby 1.9.3p551 rails (4.2.5.1, 4.2.5) 阿瑞尔 (6.0.3) arel-helpers (2.2.0)

这是我在控制器中使用的语法:

table = Arel::Table.new(:table)
query = table.where( u[:column].eq(current_user.id) )
@rows = Conversation.find_by_sql( query.to_sql )

这是我在加载该页面时遇到的错误

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM `table` WHERE `table`.`row` = 1' at line 1: SELECT FROM `table` WHERE `table`.`row` = 1

具体可以看这个:

SELECT FROM `table` WHERE `table`.`row` = 1

如您所见,'SELECT * FROM' 中缺少“*”,它去哪儿了?为什么不在那里?如何在不手动解析字符串的情况下添加它?

你可以使用 #project,像这样:

users = Arel::Table.new(:users)
users.where(users[:email].eq('jon@doe.com')).project('*').to_sql
 => "SELECT * FROM \"users\"  WHERE \"users\".\"email\" = 'jon@doe.com'"

您可以使用 Arel.star,而不是硬编码 *,就像这样

Arel::Table.new(:users).where(users[:email].eq('...')).project(Arel.star).to_sql