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

创建活动落地页遇ActiveRecord::RecordNotFound错误求助

解决ActiveRecord::RecordNotFound错误:找不到Event的ID

看起来你遇到的问题核心是路由没有传递Event的ID参数,导致Event.find(params[:id])无法找到对应的记录。咱们一步步来修复:

1. 修正路由配置

你当前的landing_page路由没有包含Event的ID占位符,所以请求时params[:id]是空的。推荐用RESTful的成员路由(member route)来定义,这样会自动把Event的ID纳入路由路径中:

修改routes.rb:

resources :events do
  resources :guests
  # 把landing_page定义为events的成员路由
  member do
    get 'landing_page'
    post 'landing_page'
  end
  # resources :guestlists
end

或者如果你更习惯用match语法,也可以明确指定包含ID的路径:

match '/events/:id/landing_page', to: 'events#landing_page', as: :landing_page, via: [:get, :post]
resources :events do
  resources :guests
  # resources :guestlists
end

这两种方式都会生成带ID的路由路径:/events/:id/landing_page,请求时params[:id]就会被正确填充。

2. 验证控制器逻辑

你的landing_page控制器方法本身没问题,但要确保访问时用正确的路由辅助方法生成URL。比如在视图里跳转时,应该用:

<%= link_to '查看活动落地页', landing_page_path(@event) %>

这样会生成类似/events/1/landing_page的URL,其中1就是对应Event的ID。

3. 可选:添加错误处理(增强健壮性)

为了避免偶尔的ID缺失导致崩溃,可以在控制器里添加简单的错误处理:

def landing_page
  @event = Event.find_by(id: params[:id])
  if @event.nil?
    redirect_to events_path, alert: "找不到对应的活动"
    return
  end
end

用find_by代替find不会直接抛出异常,然后可以给用户友好的提示。

这样调整后,你应该就能正常访问活动落地页,不会再出现找不到Event的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:40:11