Daré otro ejemplo que he utilizado. Tengo un método user_params que devuelve los parámetros necesarios para guardar para el usuario (este es un proyecto de Rails)
def user_params
params.require(:user).permit(
:first_name,
:last_name,
:email,
:address_attributes
)
end
Puede ver que no devuelvo nada, pero ruby devuelve el resultado de la última línea.
Luego, después de algún tiempo, necesitaba agregar un nuevo atributo condicionalmente. Entonces, lo cambié a algo como esto:
def user_params
u_params = params.require(:user).permit(
:first_name,
:last_name,
:email,
:address_attributes
)
u_params[:time_zone] = address_timezone if u_params[:address_attributes]
u_params
end
Aquí podemos usar tap para eliminar la variable local y eliminar el retorno:
def user_params
params.require(:user).permit(
:first_name,
:last_name,
:email,
:address_attributes
).tap do |u_params|
u_params[:time_zone] = address_timezone if u_params[:address_attributes]
end
end
User.new.tap &:foobar