Arel gem:" SELECT *"在rails中的where子句中丢失

时间:2016-01-29 17:35:31

标签: mysql sql ruby-on-rails ruby arel

我已经广泛搜索了这个问题的答案,显然整个世界都没有人遇到过这个问题。我正在使用这些宝石:

ruby​​ 1.9.3p551 铁轨(4.2.5.1,4.2.5) arel(6.0.3) 帮助者(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'它去了哪里?为什么不在那里?如何在不手动解析字符串的情况下添加它?

1 个答案:

答案 0 :(得分:0)

您可以使用#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