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

时间:2015-03-08 21:46:32

标签: ruby-on-rails ruby url-redirection url-parameters query-parameters

我正在使用rails 4构建联系表单创建应用程序。

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

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

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

如果通过john@website.com等示例电子邮件提交联系表单,则查询字符串会像这样构建...

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

如你所见,它失去了'@'字符。我怎么能保留@字符?

在Contact控制器的create函数中,以下是我构建查询字符串的方法......

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

感谢您的任何意见!

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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