如何使用 redirect_to 在查询字符串中正确传递参数? (Rails 4)

How to properly pass parameter in query string with redirect_to? (Rails 4)

我正在使用 rails 4.

构建联系表单创建应用

用户可以创建联系表单(在应用程序中称为 Contactable),提交后会创建一个 Contact 并将联系人重定向到用户指定的 URL。

我正在尝试通过重定向将联系人的电子邮件地址作为查询字符串传递。

使用我当前的设置,电子邮件确实在查询字符串中传递,但它丢失了“@”符号。

如果提交的联系表单带有示例电子邮件,如 john@website.com,查询字符串将像这样构建...

http://website.com/?email=johnwebsite.com

如您所见,它丢失了“@”字符。我怎样才能保留那个@字符?

在联系人控制器的创建函数中,这是我构建查询字符串的方式...

respond_to do |format|
  if @contact.save
    if @contactable.redirect_url.present?
      format.html { redirect_to @contactable.redirect_url + '?email=' + @contact.email }
      format.json { render :show, status: :created, location: @contact }
    else
      format.html { redirect_to :back, notice: @contactable.thanks_message }
      format.json { render :show, status: :created, location: @contactable }
    end
  else
    format.html { render :new }
    format.json { render json: @contact.errors, status: :unprocessable_entity }
  end
end

感谢任何意见!

您不应通过字符串连接手动构建 url,因为某些字符需要在有效的 url 中进行编码。如果可能,使用带参数的 url 助手。

我不知道这是否有效(取决于 contactable 的实施):

@contactable.redirect_url(email: @contact.email)

如果无法做到这一点,请确保自己进行有效编码:

"#{@contactable.redirect_url}?email=#{ERB::Util.url_encode(@contact.email)}"