不要在查询中使用字符串插值,它会使你的代码有被 SQL 注入攻击的风险
# 差——插值的参数不会被转义
Client.where("orders_count = #{params[:orders]}")
# 好——参数会被适当转义
Client.where('orders_count = ?', params[:orders])
# 差的编码习惯
Client.where(
'created_at >= ? AND created_at <= ?',
params[:start_date], params[:end_date]
)
# 好的编码习惯
Client.where(
'created_at >= :start_date AND created_at <= :end_date',
start_date: params[:start_date], end_date: params[:end_date]
)
# 差的编码习惯
User.where("id != ?", id)
# 好的编码习惯
User.where.not(id: id)