У меня есть вложенная форма, которая включает урок / вопросы / ответы. Пользователь заполняет поля ответа и нажимает кнопку отправить. Хеш показан ниже:
Parameters: {"commit"=>"Submit Answers", "action"=>"update", "_method"=>"put", "authenticity_token"=>"y##########o=", "lesson"=>{"questions_attributes"=>{"0"=>{"id"=>"1", "answer"=>{"response"=>"answertextanswertext", "user_id"=>"2"}}, "1"=>{"id"=>"4", "answer"=>{"response"=>"answertextanswertext", "user_id"=>"2"}}}}, "id"=>"1", "controller"=>"lessons"}
В своем заявлении на обновление я хотел бы просмотреть циклы ответов и перезаписать user_id в целях безопасности. Я изменил свое заявление об обновлении следующим образом:
def update
@lesson = Lesson.find(params[:id])
lesson_params = params[:lesson]
for q in lesson_params[:questions_attributes].values
for s in q.values
if !s[:user_id].nil?
s[:user_id] = current_user.id.to_s
end
end
end
if @lesson.update_attributes(lesson_params)
flash[:notice] = "Answers submitted successfully."
redirect_to lessons_path
else
render :action => 'edit'
end
end
Я нуб, поэтому обход вложенного хэша был методом проб и ошибок. Это подходящий способ перебрать вложенный хэш? Это хороший способ защиты от массовых назначений?
Спасибо, Алекс