Я не вижу никаких SQL возможностей для инъекций. Методы ActiveRecord, которые принимают параметры, такие как order
, обычно безопасны.
Однако, поскольку Sumak указывает , передача строковых параметров небезопасна. order("created_at #{params[:sort]}")
теоретически открыто для SQL инъекции. См. rails-sqli.org для получения дополнительной информации об уязвимостях.
Более новые версии Rails устарели и предупредят вас.
ПРЕДУПРЕЖДЕНИЕ О УСТАРЕВАНИИ: Опасный метод запроса ( метод, аргументы которого используются как raw SQL), вызываемый с неатрибутивным аргументом (ами)
Линтеры, такие как rubocop-rails , проверит ваш код за вас. И вы можете следовать Руководству по стилю Rails , чтобы избежать проблем с безопасностью.
Ваш взгляд не превращает заказы в выпадающее меню. Вместо этого это просто куча текста. Как подсказал lurker , используйте такую функцию, как collection_select
, чтобы сгенерировать для вас теги select
и option
.
<%= form_for @user do |f| %>
<%= f.collection_select :booking_id, @bookings, :id, proc { |b| "#{b.address} #{b.created_at}" , prompt: true %>
<%= f.submit %>
<% end %>
Чтобы привести это в порядок немного, вы можете добавить метод в Booking для создания нужного ярлыка и заменить proc
.
class Booking
def dropdown_value
"#{address} #{created_at}"
end
end
<%= form_for @user do |f| %>
<%= f.collection_select :booking_id, @bookings, :id, :dropdown_value, prompt: true %>
<%= f.submit %>
<% end %>