Как отправить переменную из действия без использования URL в Rails? - PullRequest
0 голосов
/ 15 июня 2019

Как отправить переменную / параметр из действия без использования URL?

Мне нужно создать пользователя за несколько шагов, а пользователь будет создан на втором шаге. Мне нужно получить письмо от пользователя с первого шага.

В качестве первого шага я получаю письмо по адресу params и использую эту строку кода: redirect_to new_user_registration_path(email: params[:email]), чтобы отправить его на следующую страницу / действие.

По некоторым причинам мне сказали, что я не могу использовать электронные письма в URL-адресах, поэтому теперь мне нужно отправить электронное письмо изнутри, что, конечно, возможно с помощью метода POST, но redirect_to не поддерживает POST запросы.

Может быть предложение использовать render вместо redirect_to, но я использую Devise, поэтому я бы хотел передать функциональность Devise вместо того, чтобы делать все вручную самостоятельно.

Существует другая идея использования файлов cookie для хранения адреса электронной почты, но меня интересует больше способ Rails.

Ответы [ 2 ]

2 голосов
/ 15 июня 2019

Может быть и другой способ, один из них - использование session

На первом шаге отправки формы сохраните электронную почту в session variable и используйте ее на следующем шаге, после чего очистите session variable.

Например -

def first_step
  @user = User.new
end

def second_step
  # Assuming after first step form is being submitted to second step
  session[:email] = params[:email]
end

def next_step
  user_email = session[:email]
end

При этом session[:email] будет доступен везде, кроме слоя модели, если только он не установлен пустым (session[:email] = nil), который должен быть пустым после создания пользователя.

1 голос
/ 15 июня 2019

Вы можете использовать flash для этого

flash[:email] = params[:email]
redirect_to new_user_registration_path

на ваш взгляд, что-то вроде этого

<%= hidden_field_tag :email, flash[:email]

Вам нужно будет добавить эту строку

class ApplicationController < ActionController::Base
  add_flash_types :email

Я просто публикую это как возможное решение, я понимаю, что это не лучшее решение для каждого случая

...