如何在不使用 Rails 中的 URL 的情况下从操作发送变量?

How to send a variable from an action without using the URL in Rails?

如何在不使用 URL 的情况下从操作发送 variable/parameter?

我需要分多个步骤创建用户,用户是在第2步创建的。我需要从第一步开始接收用户的电子邮件。

第一步,我在 params 收到电子邮件,并使用这行代码:redirect_to new_user_registration_path(email: params[:email]) 将其发送到下一个 page/action。

出于某些原因,我被告知我不能在 URL 秒内使用电子邮件,所以现在我需要在幕后发送电子邮件,这肯定可以通过 POST方法,但 redirect_to 不支持 POSTs 请求。

可能有人建议使用 render 而不是 redirect_to,但我正在使用 Devise,所以我想将功能交给 Devise,而不是全部手动完成我一个人

还有另一种使用 cookie 存储电子邮件地址的想法,但我更感兴趣的是 Rails 方式。

也可以有另一种方法,一种方法是使用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),创建用户后应设置为空白。

您可以为此使用 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

I'm just posting this as a possible solution, I realize this is not some best-practice solution for every case