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

为何创建表单时f.select选项值无法保存,编辑时却正常?

问题诊断与解决方案

嘿,我一眼就揪出问题所在了!你在create方法里写的@event.category_id = params[:category_id]这行代码是错的,这正是首次创建时分类ID无法保存的元凶。

为什么会出现这个问题?

你的表单里用form.select(:category_id)生成的HTML元素,它的name属性会是event[category_id]——也就是说,选择框的值会被嵌套在params[:event]这个哈希里,而不是直接出现在params的根层级。你现在直接取params[:category_id],根本拿不到任何值,所以首次创建时@event的category_id其实是空的,自然保存后看不到这个值。

而编辑的时候,你应该是依赖了正确的强参数处理(event_params),所以重新选择后能正常保存。

具体修改步骤

  1. 删除冗余的手动赋值代码
    把create方法里的这行删掉:

    @event.category_id = params[:category_id]
    
  2. 确保强参数包含category_id
    检查你的event_params方法,一定要把category_id加到允许的参数列表里,比如:

    def event_params
      params.require(:event).permit(:name, :description, :start_time, :category_id) # 这里可以补充你需要的其他字段
    end
    
  3. 表单代码无需修改
    你现有的表单代码是正确的:

    <%= form.select(:category_id, options_for_select(@categories, :selected => form.object.category_id), {}, {required: 'true', class: 'form-control form-control-lg custom-select'}) %>
    

    options_for_select用form.object.category_id设置默认选中值的写法没问题,不用调整。

做完这两步,你再试一次首次创建表单,分类ID应该就能正常保存并显示在详情页了,不用再重复编辑的步骤啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:00:21