2012-11-26 86 views
4

我試圖從頁面保存url參數到會話中,所以如果有人在離開他們的着陸頁導航後填寫表單,它會保持活動ID。我設法使它一頁接一頁地工作,所以如果他們用params登陸表單,它會保留它,但是如果它們離開的話顯然不會。我目前有:在會話中保存URL參數(rails)

控制器:

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 

當我用PARAMS,它的工作,但沒有會話,因此我假設我不是正確保存呢?

回答

-2

我把這個在我的應用程序佈局:

- 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 
+0

我認爲@awenkhh建議更多的Rails方式,但它是你的選擇。 – 244an

9

你可以過濾器前控制器/加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]

+0

我需要它來設置PARAMS [:活動]爲會話[:競選]所以它可以在任何地方使用 – user1738017

+0

ApplicationController與每個請求一起被調用,因爲所有的控制器都從它繼承。你在下面做的是不應該放在視圖文件中的邏輯。嘗試它像我建議,你在軌道上;-) – awenkhh