rails命令参数化查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rails命令参数化查询相关的知识,希望对你有一定的参考价值。
我知道订单不安全,所以我想重构这段代码:
@tasks = @search.result.joins(user_application_status: {student_application: [student_profile: :student]})
.order(sort_column + ' ' + sort_direction).page(params[:page])
sort_column
直接从params读取并且会像user_application_tasks.name
和sort_direction
那样返回像asc
那样的东西,我试着将它重构为:
.order("? ?", sort_column, sort_direction).page(page_params)
但是我收到了一个错误
ActiveRecord::StatementInvalid - PG::SyntaxError: ERROR: syntax error at or near ","
LINE 1: ...HERE (application_statuses.id = 137) ORDER BY ? ?, user_app...
我之前做过类似的事情
Thing.where("state = ?" ,params[:state])
我省略了一些特殊的语法吗?
编辑:
我最担心的是有人能够在这里注入sql并做一些有害的事情,因为@spickermann提到订单不会清理数据所以
Thing.order("name; drop table users;")
将导致用户表被销毁。
答案
order
在像where
这样的列表中提供属性时不会清理属性。
但接受像这样的哈希:
order(sort_column => sort_direction)
以上是关于rails命令参数化查询的主要内容,如果未能解决你的问题,请参考以下文章