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

时间:2016-01-06 14:01:10

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord redmine redmine-plugins

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

例如,我有一个模型my_redmine_plugin附带的插件MyPluginModel。在插件初始化时,我想

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

给出以下代码:

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

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

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

`table_structure': Could not find table 'mypluginmodel' (ActiveRecord::StatementInvalid)
...

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

1 个答案:

答案 0 :(得分:0)

尝试使用after_initialize代替to_prepare。这不是Redmine问题--Rails初始化过程有不同的钩子,它们在启动期间的不同时间运行。有关详细信息,请参阅the API docs

更新:考虑到这一点,这可能对迁移没有帮助 - 您可以从钩子中解除该错误。