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