You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

referred_by字段无法赋值问题求助

问题诊断与修复方案

你的推荐人信息无法写入数据库的问题,根源在于两个关键错误:

1. 推荐人查询字段错误

在注册控制器的build_resource方法中,你使用User.find_by(referred_by: cookies[:referred_by])查询推荐人,但cookies[:referred_by]存储的是推荐人的referral_code(邀请码),而非referred_by关联字段(该字段存储的是用户ID)。这个错误导致查询永远无法匹配到对应用户,自然无法设置referred_by关联。

2. 资源实例创建顺序错误

你先尝试给self.resource赋值推荐人,但随后调用resource_class.new_with_session(hash, session)重新创建了一个全新的User实例,直接覆盖了之前设置好的resource,导致推荐人信息被清空。


修复后的注册控制器代码

class Users::RegistrationsController < Devise::RegistrationsController
  invisible_captcha only: :create

  protected

  def build_resource(hash = {})
    # 先创建用户实例,确保后续赋值不会被覆盖
    self.resource = resource_class.new_with_session(hash, session)
    
    # 检查Cookie并设置推荐人
    if cookies[:referred_by].present?
      # 使用正确的referral_code字段查询推荐人
      referrer = User.find_by(referral_code: cookies[:referred_by])
      self.resource.referred_by = referrer if referrer.present?
    end
  end

  def sign_up(resource_name, resource)
    sign_in(resource_name, resource)
  end
end

验证修复效果的小技巧

可以在build_resource方法中添加日志,确认是否正确获取到推荐人:

def build_resource(hash = {})
  self.resource = resource_class.new_with_session(hash, session)
  
  if cookies[:referred_by].present?
    referrer = User.find_by(referral_code: cookies[:referred_by])
    Rails.logger.info "推荐人查询结果: #{referrer&.email || '未找到'}"
    self.resource.referred_by = referrer if referrer.present?
  end
end

启动服务器后查看日志,就能直观确认推荐人是否被正确识别。

内容的提问来源于stack exchange,提问作者mwhocl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 22:03:08