Как разрешить все атрибуты, кроме user_id, с помощью strong_parameters?

Я хотел бы использовать что-то вроде этого:

def answer_params
  params.require(:answer).permit!.without(:user_id)
end

person tomekfranek    schedule 20.03.2013    source источник


Ответы (2)


это сработает?

params.require(:answer).permit!.except(:user_id)
person jvnill    schedule 20.03.2013
comment
Несмотря на то, что решение правильное, важно помнить (относительно исходного вопроса), что это опасное решение. Вы должны использовать подход белого списка при работе с разрешенными атрибутами, а не черный список. - person Simone Carletti; 21.04.2013
comment
@SimoneCarletti существует множество обстоятельств, когда подход с использованием белого списка действительно является чрезмерным, а занесение в черный список никоим образом не опасно. Не каждая модель представляет серьезную угрозу безопасности. Угроза должна оцениваться в каждом конкретном случае. - person Chris Nicola; 25.06.2014
comment
@ChrisNicola Я добавляю свой голос к вашему комментарию, я думаю, что должен быть метод запрета, а также для меня имеет смысл блокировать опасные параметры. - person Waheed; 11.04.2019

Я просто хочу поместить это здесь, белый список не является СУХИМ. Представьте себе JSON API для записи на основе документа, которая может иметь до 100 (или более) атрибутов (пар ключ-значение). Как правило, вам нужно беспокоиться только об атрибутах, которые могут повышать привилегии, такие как user_id.

person Jason Kenney    schedule 04.08.2013
comment
Просто можно изолировать белый список от контроллера и повторно использовать его в нескольких классах. Это решило бы проблему. - person IvRRimUm; 28.02.2017