You need to enable JavaScript to run this app. Rails 6 通过爬虫控制器创建帖子时如何关联当前登录用户
优惠活动
大模型
产品
解决方案
定价
更多

Rails 6 通过爬虫控制器创建帖子时如何关联当前登录用户

你的猜测完全正确,问题根因是新增关联后vehicles表的user_id为必填字段,爬虫创建车辆记录时没有传入该值,触发了关联验证导致保存失败。按以下步骤修改即可解决:

步骤1:修改控制器逻辑,传递当前用户ID到爬虫

更新VehiclesController的scrape方法,把current_user.id作为参数传给爬虫:

def scrape
  url = 'https://www.example.com/vehicles'
  # 新增传递当前用户ID参数
  response = VehiclesSpider.process(url, current_user.id)
  if response[:status] == :completed && response[:error].nil?
    flash.now[:notice] = "Successfully scraped url"
  else
    flash.now[:alert] = response[:error]
  end
rescue StandardError => e
  flash.now[:alert] = "Error: #{e}"
end

步骤2:修改爬虫接收用户ID并透传

更新VehiclesSpider的process方法,接收用户ID并传递到爬虫执行上下文:

def self.process(url, user_id)
  @start_urls = [url]
  # 将用户ID存入自定义数据字段,供parse方法调用
  self.crawl!(data: { user_id: user_id })
end

步骤3:创建车辆记录时关联用户

更新VehiclesSpider的parse方法,拿到用户ID后合并到创建参数中:

def parse(response, url:, data: {})
  url = "https://www.example.com/new-vehicles/"
  # 从上下文取出当前用户ID
  current_user_id = data[:user_id]

  # ... 省略原有页面解析逻辑

  pagination_vehicle_listings.each do |vehicle_listing|
    vehicle = {
      title: ...,
      price: ...,
      color: ...          
    }
    # 合并用户ID后执行创建
    Vehicle.where(vehicle.merge(user_id: current_user_id)).first_or_create
  end
end

补充说明:如果业务要求同一条车辆数据可以被多个用户关联,不需要重复创建车辆记录,可以把创建逻辑调整为以下写法,避免生成冗余数据:

Vehicle.where(vehicle).first_or_create(user_id: current_user_id)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 07:15:04