Никогда, когда-либо , когда-либо вставляйте необработанные строки в ваш SQL.Это очень плохая форма.Вы всегда должны использовать механизм побега, предоставляемый Rails, или что-то подобное, чтобы избежать серьезных неприятностей.Вставка содержимого из params
очень опасна и никогда не должна выполняться, так как для этого нужно просто обнулить ваше приложение: { :query => '\"-- DROP TABLE users;' }
Как правило, вы используете вспомогательные методы , предоставленные ActiveRecord для сборкиПошаговый запрос:
scope = Product
if (params[:query].present?)
scope = scope.where([ 'name LIKE ?', "%#{params[:query]}%" ])
end
if (params[:example].present?)
scope = scope.where(:example => true)
end
@products = scope.all
Вы можете создать его поэтапно, каждый раз изменяя область действия на месте, а затем выполнить последний вызов, чтобы получить его.Как правило, именно тогда вы используете свой paginator, чтобы разделить результаты.
Это нормально, если вы добавите почти все в ваши параметры, потому что это должно быть экранировано к моменту достижения фазы SQL, как и все, что находится на стороне HTML.также экранируется для вас.
Не путайте переменные экземпляра, такие как @options
, с символом, подобным :query
.Это очень разные вещи.Переменные экземпляра имеют преимущество в автоматическом распространении на ваше представление, поэтому они часто широко используются в контроллерах.Представления должны по возможности избегать их изменения в зависимости от стиля.