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

Rails嵌套路由下关联模型Schedule新建时如何获取Movie的id

问题根因

你在嵌套路由场景下,父资源Movie的ID参数名是movie_id而非id,之前使用params[:id]无法匹配到对应值,导致@movie为空才触发报错。

修复步骤

1. 修正SchedulesController代码

新增前置回调统一获取Movie实例,补充参数校验和异常处理逻辑:

class SchedulesController < ApplicationController
  # 给需要关联Movie的动作加前置查询
  before_action :set_movie, only: [:new, :create]

  def new
    @schedule = @movie.schedules.build
  end

  def create
    @schedule = @movie.schedules.build(schedule_params)
    if @schedule.save
      # 跳转路径可根据业务需求调整,示例跳转到电影列表页
      redirect_to admin_movies_path, notice: '场次创建成功'
    else
      # 保存失败则返回新建页面回显报错
      render :new
    end
  end

  private
  def set_movie
    # 用嵌套路由规范的movie_id参数取值
    @movie = Movie.find(params[:movie_id])
  end

  # 补充Strong参数配置,放行允许提交的字段
  def schedule_params
    params.require(:schedule).permit(:start_time, :end_time)
  end
end

2. 修正View表单路径

嵌套路由场景下直接传入父资源和子资源实例数组,Rails会自动生成正确的提交地址,不需要手动写url参数:
把原代码里的

<%= form_with model: @schedule, url: movie_schedules_path do |form| %>

修改为

<%= form_with model: [@movie, @schedule] do |form| %>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:39:05