Rails: params com double splat operator

Dicas - 25/Out/2020 - por Henrique Morato

No Ruby tem um operador chamado double splat (**) que tem diversos usos mas, no Rails, ele pode simplificar merge de chaves no seu hash params.

Exemplo, num código temos uma classe Plan que, para construí-la, precisamos da pessoa que está adicionando aquele plano e em qual filial da empresa ele será criado. Podemos então começar encontrando a filial e construir o plano associado àquela filial. Nessa hora, algumas pessoas faria algo assim nos params:

def plan_params
  params.require(:plan).permit(:tile, :value).merge(user: current_user)
end

Então você criou uma modificação que talvez não sirva para todos os outros casos em que esse método for chamado. Usando double splat você poderia simplificar na chamada fazendo algo como:

def create
  @subsidiary = Subsidiary.find(params[:id])
  @plan = @subsidiary.plans.create(**plan_params, user: current_user)
  @plan.save
end

Note que estamos usando um método fornecido pela associação has_many, o plans.create. Com ele, a filial já vem preenchida e agora só precisamos do usuário, que usa o double splat!

Foto de perfil do autor
Henrique Morato

Dev