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

Rails中link_to传多参数报错:No route matches [GET]

问题解决步骤

1. 修正路由辅助方法误用

你遇到的No route matches [GET] "/events/7/event_guests.4"错误,核心原因是取消报名的链接误用了复数路由辅助方法。从你提供的路由列表可以看到,DELETE动作对应的路由前缀是单数的event_event_guest,而非复数的event_event_guests——复数路径仅对应创建(POST)动作,不需要id参数,因此你传递@event_guest时,Rails会把它的id误识别为URL格式后缀,导致路径无效。

修改user/show.html.erb中的取消报名链接:

<% if user_signed_in? && !@event_guest.nil? %>
  <%= link_to "Not attend", event_event_guest_path(@event, @event_guest), data: { turbo_method: :delete, turbo_confirm: "确定要取消报名吗?" } %>
<% end %>

2. 修复Controller拼写错误

EventGuestsController的destroy方法里存在拼写错误:EventGuest.exist?应改为EventGuest.exists?(多一个s),否则会触发方法不存在的错误:

def destroy 
  if EventGuest.exists?(params[:id])
    @event_guest = EventGuest.find(params[:id])
    @event_guest.destroy 
  end
  redirect_to root_path, status: :see_other
end 

同时将redirect_to root改为redirect_to root_path,更符合Rails规范。

3. 可选优化:简化EventsController的show方法

原show方法的判断逻辑可以用find_by简化,代码更简洁:

def show 
  @event = Event.find(params[:id])
  @event_guest = EventGuest.find_by(attended_event_id: @event.id, attendee_id: current_user.id) if user_signed_in?
end 

用户未登录时@event_guest自动为nil,无需额外判断。

内容的提问来源于stack exchange,提问作者Thảo Nguyễn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:25:27