Редактировать сильный параметр, если он присутствует?

#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 inside user_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?