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
相关产品推荐
相关产品推荐

