4

我正在尝试将来自任何页面的 url 参数保存到会话中,因此如果有人在离开其登录页面后填写表格,它会保留活动 ID。我已经设法让它逐页工作,所以如果他们用参数登陆表单,它会保留它,但如果他们导航离开显然不会。我目前有:

控制器:

def campaign
  if params[:campaign]!= nil
    session[:campaign] = params[:campaign]
  end
end

def post

  rif = Registerinterest.find(:all, :conditions => ["reference = ?", session[:campaign]])

  if rif.count == 0
    post["Campaign_ID"] = "701D00000001111"
  else
    post["Campaign_ID"] = rif.first.campaign_id
  end
end

当我使用参数而不是会话时它起作用了,所以我假设我没有正确保存它?

4

2 回答 2

9

您可以在 controllers/application_controller.rb 中添加一个前置过滤器

class ApplicationController < ActionController::Base
  before_filter persist_campaign_session

  def persist_campaign_session
    session[:campaign] ||= params[:campaign]
  end
end

如果session[:campaign]设置它将被使用,否则params[:campaign]将被使用。session[:campaign]您应该在一个好的地方实施重置。

于 2012-11-26T12:14:20.347 回答
-3

我把它放在我的应用程序布局中:

- if params[:campaign] != nil || params[:campaign] != ""
  - session[:campaign] == params[:campaign] 

然后使控制器正常工作:

def post

  rif = Registerinterest.find(:all, :conditions => ["reference = ?", session[:campaign]])

  if rif.count == 0
    post["Campaign_ID"] = "701D00000001111"
  else
    post["Campaign_ID"] = rif.first.campaign_id
  end
end
于 2012-11-26T15:52:54.047 回答