2012-01-18 3 views
1

J'ai un code ici je dois modifier au sujet d'une balayeuse Rails:Rails: Accès aux variables de contrôleur dans un Sweeper

class UserTrackingSweeper < ActionController::Caching::Sweeper 
    observe User 

    def after_update(user) 
    return if user.nil? || user.created_at.nil? #fix weird bug complaining about to_date on nil class 
    return if user.created_at.to_date < Date.today || user.email.blank? 

    user.send_welcome_email if user.email_was.blank? 
    end 

    #use sweeper as a way to ingest metadata from the user access to the site automatically 
    def after_create(user) 
    begin 
     if !cookies[:user_tracking_meta].nil? 
     full_traffic_source = cookies[:user_tracking_meta] 
     else 
     if !session.empty? && !session[:session_id].blank? 
      user_tracking_meta = Rails.cache.read("user_meta_data#{session[:session_id]}") 
      full_traffic_source = CGI::unescape(user_tracking_meta[:traffic_source]) 
     end 
     end 
     traffic_source = URI::parse(full_traffic_source).host || "direct" 
    rescue Exception => e 
     Rails.logger.info "ERROR tracking ref link. #{e.message}" 
     traffic_source = "unknown" 
     full_traffic_source = "unknown" 
    end 

    # if I am registered from already, than use that for now (false or null use site) 
    registered_from = user.registered_from || "site" 
    if params && params[:controller] 
     registered_from = "quiz" if params[:controller].match(/quiz/i) 
     # registered_from = "api" if params[:controller].match(/api/i) 
    end 


    meta = { 
     :traffic_source => user.traffic_source || traffic_source, 
     :full_traffic_source => full_traffic_source, 
     :registered_from => registered_from, 
     :id_hash => user.get_id_hash 
    } 
    user.update_attributes(meta) 
    end 

end 

Le problème est que je l'ai remarqué qu'il doesnt semble possible d'accéder au cookies et paramètres hachage dans un balayeur mais il semble bien dans certains des environnements d'intégration de notre société. Cela ne fonctionne pas dans ma machine locale. Donc mes questions sont:

  1. Comment est-il possible d'accéder aux paramètres/cookies dans une balayeuse?
  2. Si ce n'est pas possible, que feriez-vous à la place?

Merci

Répondre

0

Je suis sûr que vous pouvez utiliser des variables de session dans un Sweeper cache donc si quelque chose a mis tout ce que vous avez besoin là-bas et vous êtes mis