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

Rails下拉菜单无法保存选中数据问题求助

问题解决步骤

1. 修正模型关联与数据库结构

你当前的关联逻辑完全搞反了:

  • 需求是餐厅属于某个餐品分类(早餐/午餐/晚餐),正确的关联应该是:
    # app/models/restaurant.rb
    class Restaurant < ApplicationRecord
      belongs_to :meal
    end
    
    # app/models/meal.rb
    class Meal < ApplicationRecord
      has_many :restaurants
    end
    
  • 同时要确保restaurants数据表存在meal_id外键字段,若之前建表未添加,需生成迁移补充:
    rails generate migration AddMealIdToRestaurants meal:references
    rails db:migrate
    

2. 允许强参数中的meal_id

在RestaurantsController的强参数方法里,必须将meal_id加入允许列表,否则Rails会自动过滤该参数:

# app/controllers/restaurants_controller.rb
private
def restaurant_params
  params.require(:restaurant).permit(
    :name, # 替换为你餐厅模型的其他实际字段
    :meal_id # 必须添加这一行
  )
end

3. 确认表单显示字段匹配模型属性

检查Meal模型中存储餐品名称(早餐/午餐等)的字段名:

  • 如果字段是meal,当前表单代码没问题;
  • 如果字段是name,需要把表单里的:meal改成:name:
<div class="field">
  <%= form.label "Meal" %>
  <%= form.collection_select(:meal_id, Meal.all, :id, :name, { prompt: 'Select a Meal', selected: @restaurant.meal_id }, { class: 'form-control' }) %>
</div>

完成以上三步后,下拉菜单选中的meal_id即可正常保存到餐厅条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:31:23