Rails第一次设计after_sign_in,检查属性并更新另一个用户一次

时间:2016-12-22 19:43:43

标签: ruby-on-rails ruby devise

用户首次登录后,我想看看是否有其他用户通过referral_code_used列引用了他们,并增加了该用户的referral_count + 1.目前,用户已登录并被带到home_path

我尝试编写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.我猜这是在新的会话控制器中,由控制器处理,但我不确定。

当我把它放在应用程序控制器中时,如下所示,没有路由问题,但它多次调用它并为referral_count添加多于1:

 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 个答案:

答案 0 :(得分:2)

尝试用modname/mod.rs

替换redirect_to home_path
home_path