2016-12-22 57 views
0

用戶第一次登錄後,我想看看另一個用戶是否通過referral_code_used列引用了它們,並增加了該用戶的referral_count + 1.目前,用戶已登錄並被帶到home_pathRails第一次設計after_sign_in,檢查屬性並更新另一個用戶一次

我試過編寫after_sign_in_path_for(resource)方法。就推薦次數而言,這完成了工作。問題是這需要用戶到users/:id路徑而不是回家。

def after_sign_in_path_for(resource) 

    if resource.sign_in_count > 1 
    puts "sign in count is greater than 1" 
    elsif resource.sign_in_count === 1 
     puts "sign in count is 1" 
    if resource.referral_code_used != nil  
     referral_code = resource.referral_code.strip 
     length = referral_code.length 
     referral_code = referral_code[5..length] 
     @user_referral_code = referral_code.to_i 

     if User.exists?(id: @user_referral_code) 
     referral_user = User.find_by_id(@user_referral_code) 
     referral_user.referral_count = referral_user.referral_count + 1 
     referral_user.save 
     end 
    end 
    puts "signin count = 1" 
    end 
    #redirect_to home_path 
    end 

當我把在redirect_to的home_path,它說:Render and/or redirect were called multiple times in this action.我猜這是在新的會話控制器,它是由色器件處理,但我不確定這一點。

當我把它放在應用程序控制器,像下面,有沒有路由的問題,但它調用它多次,並增加超過1倍到referral_count:

before_action :check_referral_code 


    def check_referral_code 
    if user_signed_in? 
     if current_user.sign_in_count > 1 
     puts "sign in count is greater than 1" 
     elsif current_user.sign_in_count === 1 
      puts "sign in count is 1" 
     if current_user.referral_code_used != nil  
      referral_code = current_user.referral_code_used.strip 
      length = referral_code.length 
      referral_code = referral_code[5..length] 
      @user_referral_code = referral_code.to_i 

      if User.exists?(id: @user_referral_code) 
      referral_user = User.find_by_id(@user_referral_code) 
      referral_user.referral_count = referral_user.referral_count + 1 
      referral_user.save 
      end 
     end 
     puts "signin count = 1" 
     end 
    end 

    end 

相關路線:

devise_for :users, controllers: { registrations: "users/registrations" } 
resources :users 
get 'profile/home', to: 'profile#home', as: 'home' 

在首次登錄時檢查referral_code_used的正確方法是什麼?並且一次貸記其他用戶?謝謝!

回答

1

嘗試home_path

def after_sign_in_path_for(resource) 
    if resource.sign_in_count > 1 
    puts "sign in count is greater than 1" 
    elsif resource.sign_in_count === 1 
    puts "sign in count is 1" 
    if resource.referral_code_used != nil  
     referral_code = resource.referral_code.strip 
     length = referral_code.length 
     referral_code = referral_code[5..length] 
     @user_referral_code = referral_code.to_i 

     if User.exists?(id: @user_referral_code) 
     referral_user = User.find_by_id(@user_referral_code) 
     referral_user.referral_count = referral_user.referral_count + 1 
     referral_user.save 
     end 
    end 
    puts "signin count = 1" 
    end 
home_path 
end 
+0

是更換redirect_to home_path! redirect_to和放置路徑有什麼區別?是不是都基本上重定向? – gwalshington

+1

您只需要返回'after_sign_in_path_for'中的路徑,devise將使用此值並處理重定向,您不必在此方法中明確指定重定向。 @gwalshington – bhanu

+0

非常感謝你的解釋!現在總是有意義的。 @bhanu – gwalshington