#ruby-on-rails #ruby-on-rails-5
Вопрос:
У меня есть несколько параметров, которые мне нужно изменить?
У меня есть старая база данных, поверх которой я пытаюсь создать новое приложение для доступа и выполнения сложных операций.
Мне просто нужно создать эту структуру…
{
"volunteer_shift_attributes"=><ActionController::Parameters{
"volunteer_task_type_id"=>"41",
"roster_id"=>"7",
"program_id"=>"9",
"set_description"=>"ddddddddddd"
} permitted: true>,
"set_date"=>"2021-01-14",
"contact_id"=>"166574",
"closed"=>"0",
"start_time(4i)"=>"14",
"start_time(5i)"=>"00",
"end_time(4i)"=>"15",
"end_time(5i)"=>"00",
"notes"=>"nnnnnnnnnnnnn",
}
имейте такую структуру…
{
"volunteer_shift_attributes"=>{
"volunteer_task_type_id"=>"41",
"roster_id"=>"7",
"program_id"=>"9",
"set_description"=>"ddddddddddd"
},
"set_date"=>"2021-01-15",
"contact_id"=>"166574",
"closed"=>"0",
"start_time(4i)"=>"14",
"start_time(5i)"=>"00",
"end_time(4i)"=>"15",
"end_time(5i)"=>"00",
"notes"=>"aaaaaaaaaaaaaa"
}
ПРИМЕЧАНИЕ: это вызывается внутри метода контроллера следующим образом
def create_shift
...
a.attributes = (params["assignment"])
...
end
Мне нужно восстановить этот параметр вручную.
Комментарии:
1. Вы можете позвонить
.to_h
, чтобы преобразовать параметры ActionController::в простой хэш. Хотя ActiveRecord должен отлично обрабатывать объект параметров.2. @arieljuod итак, вы говорите, что params[«назначение»].to_h исправит это?
3. @Eyeslandic добавил ОБНОВЛЕНИЕ к сообщению. надеюсь, эта дополнительная информация ответит на вопрос.
4. Спасибо за обновление. Это похоже на пользовательское сообщение об ошибке, так что, по-видимому, в модели добровольцев или где-то еще есть что-то, что ее определяет. Если вы можете определить, где определена ошибка, вы можете увидеть, какое условие ее вызывает. (Кроме того, нигде в ваших парах нет ключевого «назначения», поэтому неудивительно, что это не удается.)
5. Похоже, вы отменили обновление и снова удалили информацию из вопроса. Можете ли вы сообщить нам, почему вы это сделали?
Ответ №1:
Не совсем понятно, зачем вам это нужно — это просто параметры, и вы не хотите менять структуру, точно. Но, похоже, это может быть поводом для сильных парамов. Определите частный метод:
def volunteer_shift_params
params.require(:volunteer_shift_attributes)
.permit(:volunteer_task_type_id,
:roster_id,
:program_id,
:set_description)
end
Тогда вы должны быть в состоянии сделать это, как вы просили:
a.attributes = volunteer_shift_params
Комментарии:
1. Сильные параметры были отключены. Мне просто нужно изменить строку параметров из одной структуры в другую, как указано.
2. Объяснение отключения сильных параметров в вашей правке вопроса для меня не имеет смысла. Строгие параметры касаются только того, как форма взаимодействует с вашим приложением Rails 5, а не с базой данных. И это отличный способ сделать ваше приложение более безопасным.