Что такое массовое назначение в Rails и нужно ли ему специальное имя? - PullRequest
0 голосов
/ 25 октября 2009

Я не знаю, является ли термин «массовое назначение» специфичным для Rails, но я понимаю, что массовое назначение - это когда вы присваиваете значения множеству переменных одним и тем же методом.

Это правильное определение и для чего существует специальное название?

Ответы [ 3 ]

6 голосов
/ 25 октября 2009

Массовое присваивание в Rails - это когда вы используете что-то вроде User.new(:name => "David", :occupation => "Code Artist"), чтобы установить все значения для строки одновременно. Опасность возникает, когда вы изменяете этот код, чтобы он был больше похож на User.new(params[:user]). Теперь конечный пользователь может злонамеренно обработать хэш, переданный в качестве параметра, в User.new и установить переменные, которые вы не ожидали. Отсюда необходимость в attr_accessible и attr_protected, которые ограничивают способность конечного пользователя устанавливать поля, на которые он не может влиять напрямую.

2 голосов
/ 25 октября 2009

По сути, без массового назначения вы создали бы такую ​​модель:

user = User.new
user.first_name = params[:user][:first_name]
user.last_name = params[:user][:last_name]

При массовом назначении сама модель выяснит, как вызвать этих сеттеров, и все, что вам нужно, это

user = User.new(params[:user])

Так что да, это - своего рода - установка множества переменных одним методом.

1 голос
/ 25 октября 2009

Некоторое поведение по умолчанию ActiveRecord подвержено уязвимости. В частности, автоматическое обновление атрибутов из отправленных пользователем форм может привести к уязвимостям . Я предполагаю, что термин массовое обновление был популяризирован как обозначение для обсуждения как удобств, так и уязвимостей этой функции ActiveRecord.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...