在WSL Ubuntu环境中安装Fedena插件时触发School Not Selected错误的技术求助
我之前碰到过Fedena在WSL Ubuntu下安装插件时的这个问题,核心原因就是多学校插件的上下文没有被正确初始化——MultiSchool.current_school返回了nil,导致查询操作触发了School Not Selected异常。下面是一步步的排查和解决方法:
1. 先确认数据库里是否存在School记录
首先要确保你的Fedena数据库里已经创建了至少一个学校实例,否则current_school肯定找不到值。
打开终端,进入Fedena项目目录,执行:
rails console # 如果你用生产环境,加 RAILS_ENV=production
在控制台里输入:
# 查看现有学校数量 puts School.count # 如果输出是0,创建一个默认学校(根据Fedena的模型要求填写必填字段) School.create!( name: "我的默认学校", code: "DEFAULT001", address: "测试地址" # 其他必填字段根据你的Fedena版本调整 )
执行完后退出控制台(输入exit)。
2. 修改插件安装的Rake任务,添加学校上下文初始化
插件安装任务在执行seeds.rb时没有设置学校上下文,导致调用需要多学校支持的方法时出错。我们需要在任务执行前手动设置当前学校。
找到/root/fedena/lib/tasks/fedena_plugin_install.rake文件,找到调用seeds.rb的代码段(错误追踪里指向第31行附近),在加载seeds.rb之前添加以下代码:
# 在加载seeds.rb前初始化学校上下文 School.skip_multischool do # 找到第一个学校,不存在就创建 default_school = School.first || School.create!( name: "默认学校", code: "DEFAULT_SCHOOL", address: "默认地址" ) # 设置当前线程的学校上下文 MultiSchool.current_school = default_school end # 原来加载seeds.rb的代码 load "#{Rails.root}/db/seeds.rb"
这里用School.skip_multischool是因为创建学校本身不需要多学校上下文,避免递归触发同样的异常。
3. 重新执行插件安装命令
保存修改后,回到终端执行:
rake fedena:plugins:install_all RAILS_ENV=production # 环境根据你的实际情况调整
为什么这个方法有效?
Fedena的acts_as_multi_school插件要求所有模型查询都在指定的学校上下文中执行,但Rake任务默认不会自动初始化这个上下文。我们通过手动创建/获取学校实例,并设置MultiSchool.current_school,让后续的数据库操作都能找到对应的学校ID,从而避免异常。
内容的提问来源于stack exchange,提问作者hanan
相关产品推荐
相关产品推荐

