#ruby-on-rails #ruby-on-rails-6 #strong-parameters
#ruby-on-rails #ruby-on-rails-6 #сильные параметры
Вопрос:
Как я могу условно отредактировать строгий параметр? Например, у меня есть следующий, который редактирует строгий параметр (страна). Он делает что-то простое; изменяет его с длинного на короткое, например, «Соединенные Штаты» на «США».
def user_params
params.require(:user).permit(:user_id, :first_name, :last_name, :country, :currency).tap do |user_params|
user_params[:country] = full_list_countries[params[:user][:country].to_sym]
end
end
Проблема в том, что он выдает ошибки всякий :country
раз, когда его нет.
Как я могу заставить код работать независимо :country
от того, присутствует он или нет?
Комментарии:
1. Какую ошибку вы получаете?
2.@Turtlean Я понял это. Я имел в виду
user_params
insideuser_params
. Это была очень плохая идея (рекурсивная функция, процессор почти сразу перешел на 100%, вентиляторы тоже)3. Ха-ха, это имеет смысл. Хорошо, тогда хорошо для вас!
Ответ №1:
Используйте if params[:country].present?
, чтобы определить, присутствует ли параметр, и обрабатывать его соответствующим образом.
Примечание. не пытайтесь использовать if user_params[:country].present?
, это приведет к рекурсивной функции и бесконечному циклу, что приведет к максимальной загрузке вашего процессора!
def user_params
if params[:country].present?
params.require(:user).permit(:user_id, :first_name, :last_name, :country, :currency).tap do |user_params|
user_params[:country] = full_list_countries[params[:user][:country].to_sym]
end
else
params.require(:user).permit(:user_id, :first_name, :last_name, :country, :currency)
end
end
Комментарии:
1. Должно быть
if params[:user] amp;amp; params[:user][:country].present?