build
сам ничего не записывает в базу данных, поэтому внедрение SQL не применяется. Когда вы вызываете save
, не имеет значения, был ли объект создан с помощью build
или с помощью другого механизма, такого как передача атрибутов в new
или с использованием отдельных методов attribute=
, тот же код будет использоваться для сохранения вашего объекта в базу данных.
Из документации о сборке :
Возвращает новый объект коллекции
тип, который был создан с
атрибуты и связанные с этим объектом
через таблицу соединений, но не имеет
еще был сохранен.
Метод save
будет экранировать любые кавычки и т. Д. В значениях вашего атрибута, используя метод, соответствующий используемой вами базе данных (например, MySQL), так что результирующий запрос insert
или create
не будет подвержен внедрению SQL , То же самое относится к update_attributes
и к любым параметризованным :conditions
, которые вы передаете find
. Время, когда вам нужно быть осторожным и, возможно, придется выполнять какое-то ручное экранирование, это когда вы когда-нибудь передаете литеральные строки в соединение с базой данных в виде запросов.