id:torutk:20180423redmine trunkを落としてglossary pluginが動くか試してみる(続々) - torutkのブログ の続きです。
Glossary PluginのRedmine 4.0対応難航中
もう、「RE:ゼロから始めるGlossary Plugin開発」にタイトル変えて一から作っていきたくなる心境ですが、それも茨の道なので(幾度か頓挫)、もうしばらく現行のGlossary Pluginの対応を進めてみたいと思います。
acts_as_list がない件の調査
Ruby on Rails 1.xの頃にはacts_as_listがあって、それ以降はなくなったといった記述をググっているときに見かけたのですが、URLメモ忘れています。
で、Redmine 3.4でどうなっているか調べると、Redmine本体の次のディレクトリにacts_as_listのコードがありました。
<Redmineインストールディレクトリ>/lib/plugins/acts_as_list/
では、Redmineの最新開発版(trunk)を見てみると、見当たりません。lib/pluginsの下は次の様になっていました。
acts_as_activity_provider acts_as_customizable acts_as_searchable acts_as_watchable open_id_authentication acts_as_attachable acts_as_event acts_as_tree gravatar
acts_as_listとatcs_as_versionedの2つが消えています。
term_category.rb の attr_accessible
まだ未対処だったので対処が必要です。
term_category.rb から attr_accessibleを削除します。
次に、term_categories_controller.rb にストロングパラメータのコード(メソッド)を追記し、そのメソッドを呼び出す場所を探しました。しかし、term_categories_controller.rb を見ると、TermCategory.where あるいは TermCategory.find_by で検索しているコードはありますが、TermCategoryをnewしているコードが見当たりません。
どうしたものかと、とりあえずサーバーを再実行し様子を見てみます。プロジェクトメニューの[用語集]をクリックすると、めでたく用語集画面が表示されました。続いて、用語定義を作っている途中、カテゴリの作成でエラーとなりました。
ActiveModel::ForbiddenAttributesError in GlossaryController#add_term_category ActiveModel::ForbiddenAttributesError Extracted source (around line #121): def add_term_category @category = TermCategory.new(params[:category]) @category.project_id = @project.id : plugins/redmine_glossary/app/controllers/glossary_controller.rb:121:in `add_term_category'
先ほど、term_categories_controller.rbにはTermCategory.newが見当たらなかったのですが、glossary_controller.rbに記載されていたのですね。うーむ、ストロングパラメータのメソッドをterm_categories_controller.rbからglossary_controller.rbに移動して、newの際に呼び出すように修正します。
が、上述のコードでTermCategoryをnewするときに渡されるパラメータの中身はproject_idだけになっている模様。ストロングパラメータのメソッドの中で
require(:category)としてもActionController::ParameterMissing (param is missing or the value is empty: category)とエラーになってしまいました。
このあたりでしっかりコントローラーに渡されるパラメータ(params)の中身と、ストロングパラメータの仕組みについて理解をしないと対処が困難になりました。