如何在插件init.rb中正确实例化模型?

Mic*_*upp 6 ruby-on-rails redmine redmine-plugins ruby-on-rails-4 rails-activerecord

如何正确初始化需要实例化插件本身定义的模型(读取数据库记录)的Redmine插件?

例如,我有一个my_redmine_plugin附带模型的插件MyPluginModel.关于插件初始化,我想

  • MyPluginModel从DB 读取记录
  • 用记录运行一些初始化代码

给出以下代码:

require 'redmine'

Redmine::Plugin.register :my_redmine_plugin do
  name 'My Redmine Plugin'

  # ...    
end

Rails.configuration.to_prepare do
  m = MyPluginModel.find(1)
  run_some_init_code(m)
end
Run Code Online (Sandbox Code Playgroud)

它看起来像to_prepare在迁移之前运行:

$ bundle exec rake redmine:plugins:migrate NAME=my_redmine_plugin

`table_structure': Could not find table 'mypluginmodel' (ActiveRecord::StatementInvalid)
...
Run Code Online (Sandbox Code Playgroud)

当我to_prepare在迁移期间注释掉块时,一切正常.有没有办法检测迁移过程?

小智 0

尝试使用after_initialize而不是to_prepare. 这不是 Redmine 问题 - Rails 初始化过程有不同的钩子,它们在启动过程中的不同时间运行。请参阅API 文档以获取更多信息。

更新:想想看,这可能仍然对迁移没有帮助——你可以从钩子中的错误中拯救出来。