Приведу другой пример, который я использовал. У меня есть метод user_params, который возвращает параметры, необходимые для сохранения для пользователя (это проект Rails)
def user_params
params.require(:user).permit(
:first_name,
:last_name,
:email,
:address_attributes
)
end
Вы можете видеть, что я ничего не возвращаю, но ruby возвращает результат последней строки.
Затем, через какое-то время, мне нужно было условно добавить новый атрибут. Итак, я изменил это примерно так:
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
Здесь мы можем использовать кран, чтобы удалить локальную переменную и удалить возврат:
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