Arel 查询错误
Errors with Arel query
我正在尝试使用 Rails 6 API 使用 Arel 构建查询。我发现 this howto 看起来不错,但我遇到了错误。尽管这些示例是多年前创建的并且基于很少的搜索,但事情看起来是一样的。我有一个简单的模块 class:
users = ::MyModule::User.arel_table
query = users.where(users[:name].eq('amy'))
在我 运行 query.to_sql
之后,我在 rails 控制台中看到:
"SELECT FROM `users` WHERE `users`.`name` = 'amy'"
这是不正确的。我希望看到:
"SELECT * FROM `users` WHERE `users`.`name` = 'amy'"
“全部”*
丢失。这是我应该提出的错误吗?因为它缺少“*”,所以我的查询失败了。
今天是我使用 Arel 的第一天。
你需要告诉 Arel 你想要什么 select:
users = ::MyModule::User.arel_table
query = users.project(users[Arel.star]).where(users[:name].eq('amy'))
尽管使用将参数化的 ActiveRecord 查询接口会容易得多:
query = ::MyModule::User.where(name: 'amy').arel
# SELECT "users".* FROM "users" WHERE "users"."name" = ?
我正在尝试使用 Rails 6 API 使用 Arel 构建查询。我发现 this howto 看起来不错,但我遇到了错误。尽管这些示例是多年前创建的并且基于很少的搜索,但事情看起来是一样的。我有一个简单的模块 class:
users = ::MyModule::User.arel_table
query = users.where(users[:name].eq('amy'))
在我 运行 query.to_sql
之后,我在 rails 控制台中看到:
"SELECT FROM `users` WHERE `users`.`name` = 'amy'"
这是不正确的。我希望看到:
"SELECT * FROM `users` WHERE `users`.`name` = 'amy'"
“全部”*
丢失。这是我应该提出的错误吗?因为它缺少“*”,所以我的查询失败了。
今天是我使用 Arel 的第一天。
你需要告诉 Arel 你想要什么 select:
users = ::MyModule::User.arel_table
query = users.project(users[Arel.star]).where(users[:name].eq('amy'))
尽管使用将参数化的 ActiveRecord 查询接口会容易得多:
query = ::MyModule::User.where(name: 'amy').arel
# SELECT "users".* FROM "users" WHERE "users"."name" = ?