Rails如何获取下拉菜单选中option的id 新建项目时id为nil怎么解决
问题原因
- 表单字段路径错误:你通过
f.select :developer_id生成的下拉字段是绑定在project表单对象下的,提交后参数会嵌套在params[:project]哈希中,你直接读取params[:developer_id]自然得到nil值 - 强参数未放行对应字段:
project_params方法中没有允许developer_id字段,即使取到对应值也无法正常赋值给模型
修复步骤
- 首先修改控制器的强参数配置,新增
developer_id字段放行:
def project_params params.require(:project).permit(:name, :user_id, :developer_id) end
- 简化
create方法逻辑,无需单独提取developer_id参数,强参数已经包含表单提交的对应值:
def create parameters = project_params.merge(user_id: current_user.id) @project = Project.new(parameters) respond_to do |format| if @project.save format.html { redirect_to projects_path, flash: { success: 'Project added successfully ' } } else format.html { render :new } end end end
可选优化
视图中options_for_select的用户id无需转字符串,可直接传入整型值,更符合Rails开发规范:
<%= f.select :developer_id, options_for_select(@users.collect {|user| [user.name, user.id] }) %>
内容的提问来源于stack exchange,提问作者smith
相关产品推荐
相关产品推荐

