Arel 宝石:"SELECT *"缺少 where 在 where 子句中



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

红宝石 1.9.3p551导轨(4.2.5.1、4.2.5)阿雷尔 (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"中缺少"*",它去了哪里?为什么不在那里?如何在不手动解析字符串的情况下添加它?

你可以为此使用 #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

相关内容

  • 没有找到相关文章

最新更新