У меня есть модель пользователя, которая в качестве внутреннего поля говорит some_internal_id
. Я не хочу, чтобы внешние пользователи могли войти в него (через массовое назначение). В идеале я не должен разрешать это в функции user_params
.
Идеальная ситуация:
Метод Create назначает внутренний параметр, примерно так:
def create
user_params[:some_internal_id] = rand(100)
@user = User.new(user_params)
@user.save
end
# Never trust parameters from the scary internet, only allow the white list through.
# No need to permit some_internal_id param here
def user_params
params.require(:user).permit(:name, :age)
end
Приведенный выше код вызывает ошибку Unpermitted parameter: some_internal_id
.
Следующее работает, но выглядит немного взломанным
Следующее решает то, что я пытаюсь сделать, но не выглядит очень чистым подходом:
def create
@user = User.new(user_params)
@user.save
end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params[:user][:some_internal_id] = rand(100)
params.require(:user).permit(:some_internal_id, :name, :age)
end
Есть ли лучший подход, когда я могу разрешить и установить параметр в методе создания - близко к тому месту, где сохраняется объект?