2017-01-06 6 views
0

Одна из моих функций создает новые агентства. В PARAMS приходят из формы, который представлен и в моем контроллере я использую:Перезаписать Params in Rails

agency_params 
     params.require(:agency).permit(:name, :cnpj, :country, :state, :city, :phone, :email, :platform_id) 
end 

В некоторых случаях (в зависимости от роли пользователя) Я не хочу, чтобы какой-либо platform_id, но только конкретный один.

Так что моя идея была:

def agency_params 
     params.require(:agency).permit(:name, :cnpj, :country, :state, :city, :phone, :email, :platform_id) 

     if current_user.platform 
     params[:platform_id] = current_user.platform.id 
     end 
    end 

Но это не похоже на работу. Как я мог это сделать? Является ли контроллер правильным местом или лучше в модели?

Спасибо!

+1

Не кажется ли вам это должно быть 'PARAMS [: агентство] [: platform_id] = current_user.platform.id'? – 31piy

+0

Спасибо, работал. Спасибо, @ 31piy – almo

ответ

0

Я предполагаю, что вы делаете что-то вроде этого в вашем методе контроллера:

def new 
    @agency = Agency.new(agency_params) 
    ... 
end 

В этом случае agency_params возвращает хэш параметров для перехода к методу new. В вашем примере, если значение current_user.platform истинно, то agency_params не возвращает параметр hash, а результат params[:platform_id] = current_user.platform_id.

Вам нужно изменить :platform_id перед возвратом хэш параметров:

def agency_params 
    if current_user.platform 
     params[:agency][:platform_id] = current_user.platform.id 
    end 
    params.require(:agency).permit(:name, :cnpj, :country, :state, :city, :phone, :email, :platform_id) 
end