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
的正確方法是什麼?並且一次貸記其他用戶?謝謝!
是更換
redirect_to home_path
! redirect_to和放置路徑有什麼區別?是不是都基本上重定向? – gwalshington您只需要返回'after_sign_in_path_for'中的路徑,devise將使用此值並處理重定向,您不必在此方法中明確指定重定向。 @gwalshington – bhanu
非常感謝你的解釋!現在總是有意義的。 @bhanu – gwalshington