redmine trunkを落としてglossary pluginが動くか試してみる(続) - torutkのブログ の続きです。
現時点でのRedmineアップデートへのプラグイン追従の感触
ここまで進めてみて、Redmine 3.4(Rails 4.2)からRedmine 4.0(Rails 5.1)へのアップデートでは、Redmine プラグインの追従が相当に遅れる気配が漂ってきました。これは大変だぞ〜うというのが現時点の感触です。
Rails 5.0では、非互換(DEPRECATION)が警告としてログに出るけど動作はするようです。しかし、RedmineのtrunkはRails 5.1なので非互換はすでに削除されているので実行時エラーとなってしまいます。
そこで、この一連の日記に書いているように、実行時エラーが発生、直して動かして、次の実行時エラーにあってまた直して動かして・・・と泥縄的な対応をしています。
せめて、「Redmine 4.0で動くためのプラグイン修正項目と修正方法はこれだ!」
ガイドがあればいいのですが*1…。
気を取り直して進めていきましょう。
まずは昨日出くわしたエラー before_filterから続けます。
before_filterがない
これは、before_actionに変えればいいとありますが、どう変えるのか分かりませんでした。いろいろ調べたところ、どうやら単純にfilterをactionに変えれるだけでいいようです。
ということで、before_filterをbefore_actionに単純修正して次に進みます。
修正したら、サーバーを再起動します。そうしないと、autoload何とかエラーが出ます。
attr_accessibleがundefined method
次のエラー画面が表示されました。
NoMethodError in GlossaryController#index undefined method `attr_accessible' for #<Class:0x00007f2cc85bcf88> Extracted source (around line #14): belongs_to :project attr_accessible :groupby def grouping? case groupby
対処方法はなんでしょうか?調べていくと「ストロングパラメーター」なるキーワードが出てきました。
見よう見まねで、次の対処をしてみました。
- GlossaryStyleモデル(app/models/glossary_style.rb)のattr_accessible行を削除
- GlossaryStylesControllerコントローラ(app/controllers/glossary_styles_controller.rb)にprivateなメソッド追加
private def glossary_style_params params.require(:glossary_style).permit(:groupby) end
同様に、Termモデル、GlossaryControllerコントローラーにも修正を入れます。
undefined method `acts_as_list'
NoMethodError in Glossary#index Showing path/to/plugins/redmine_glossary/app/views/glossary_styles/_search.html.erb where line #22 raised: undefined method `acts_as_list' for #<Class:0x00007f0a751c37a8> Extracted source (around line #5): has_many :terms, :foreign_key => 'category_id', :dependent => :nullify acts_as_list :scope => :project_id attr_accessible :name, :project_id, :position
今回確認した要修正事項
- before_filterは、単純に字面をbefore_actionにする(s/filter/action/g)。
- attr_accessibleはストロングパラメーターに置き換える。あるいはgemのprotected_attributesを追加する。
https://github.com/rails/protected_attributes
- acts_as_listを何とかする。