В а, где оператор, вы можете использовать переменные, как:? в ActiveRecord выбрать
Order.where('employee_id = ?', params[:employee_id])
Я пытаюсь сделать что-то подобное с отборное, но это не работает:
Order.select('amount FROM line_items WHERE employee_id = ? AS employee_line_items', params[:employee_id])
=> ERROR: syntax error at or near "1"
=> LINE 1: ...ployee_id" = ? AS employee_line_items, 1
Что происходит Вот? Можно ли использовать ?
в select statement? Если нет, то как вы можете вставить скрытую строку sql здесь? Я хотел бы просто использовать #{params[:employee_id]}
, но этот бит кода был бы уязвим для SQL-инъекции.
Это можно использовать как в сочетании с оТ, даже в предложение WHERE. В любом случае, спасибо за подсказку. Хорошо знать, что мы просто не можем использовать '?' Здесь. Закончилось с '# {ActiveRecord :: Base :: sanitize (params [: employee_id])}'. – nullnullnull
Если вы уверены, что 'AS' может использоваться даже в предложении where, тогда' Order.select ('amount FROM line_items'). Where (['WHERE employee_id =? AS employee_line_items', params [: employee_id]]) 'it's отлично, вы должны избегать «ActiveRecord :: Base.sanitize» любой ценой, это не просто вопрос безопасности, '?' гарантирует, что рельсы генерируют подготовленные операторы, которые очень оптимизированы на стороне базы данных. 'где (['SQL', param1, param2])' 'часть' SQL' может содержать в основном любой действительный sql, доступный в разделе WHERE' –