Как объединить значение в params есть в ruby ​​1.8 и rails 2.x - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть устаревшее приложение rails, в котором есть проблемы с безопасностью, которые я пытаюсь исправить.

В частности, это сохранение из сообщения с использованием:

@user.update_attributes(params[:user])

Я хочу убедиться, что при сохранении один из атрибутов явно задан в контроллере.Существует переменная:

@ company

Я хочу убедиться, что user.company_id имеет значение из переменной @company перед вызовом update_attributes.

Ответы [ 3 ]

0 голосов
/ 26 декабря 2018

Вы можете объединить в params на контроллере, если хотите.

user_params = params[:user].merge(:company_id => @company.id)

@user.update_attributes(user_params)

Объединение обеспечит перезапись любого company_id в параметрах

0 голосов
/ 27 декабря 2018

просто обновите пользовательские параметры вместе с company_id, попробовав что-то вроде этого ... всегда желательно внести в белый список параметры, определив метод pvt ..

def user_params
 params.permit(:user)
end

@user.update_attributes(user_params.to_h.merge!({company_id: @company.id}))

0 голосов
/ 26 декабря 2018

Если company_id отсутствует в params[:user], вы можете установить comapany_id, используя before_filter в контроллере, как:

    before_filter: set_company_id

private
    def set_company_id
     ##Assuming you have the @user and @company objects before using
     @user.company_id = @company.id
    end

, поэтому после выполнения:

@user.update_attributes(params[:user])

@ пользовательский объект сохранит все нужные атрибуты ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...