Rails 6升级后删除用户页面select_tag下拉框无选项问题求助
问题根因与解决方案
你遇到的下拉框无选项问题核心出在users_when_being_deleted辅助方法的查询逻辑错误,导致没有查询到符合条件的用户数据,options_from_collection_for_select生成的选项集合为空,所以点击下拉框无内容展示:
1. 需修复的两处错误
(1)查询条件误用字符串常量
原代码中vendor_id: "current_user.vendor_id"将查询值写死为"current_user.vendor_id"字符串,而非当前登录用户的vendor_id属性值,没有任何用户的vendor_id会匹配这个字符串,所以查询结果为空。
(2)误用实例变量而非方法入参
方法入参是user,但过滤排除当前删除用户时用了@user.id,如果实例变量@user未正确赋值会导致查询条件异常。
2. 修复后的辅助方法代码
def users_when_being_deleted(user = nil) if user User.where(vendor_id: current_user.vendor_id) .where.not(id: user.id) .order(:name) else User.where(vendor_id: current_user.vendor_id) .order(:name) end end
3. 可选验证&优化项
- 可以先在视图对应位置加调试代码
= users_when_being_deleted(@user).count,刷新页面打开模态框看输出数值,确认修复后数值大于0即说明查询逻辑正常 - 给下拉框增加空白提示项,避免用户误操作:
= select_tag :user_id, options_from_collection_for_select(users_when_being_deleted(@user), "id", "name"), include_blank: "请选择要转移的目标用户" - 若修复查询逻辑后仍点击无反应,可排查前端样式问题:检查下拉框的
z-index属性是否小于模态框的z-index,导致点击事件被模态框拦截。
内容的提问来源于stack exchange,提问作者Scott Milella
相关产品推荐
相关产品推荐

