torutkのブログ

ソフトウェア・エンジニアのブログ

Redmine 4.0(Rails 5.1)でのプラグイン作成について

redmine trunkを落としてglossary pluginが動くか試してみる(続々々) - torutkのブログにおいて、GlossaryプラグインRedmine 4.0対応に難航し暗礁に乗り上げてしまったので、別アプローチとしてゼロからGlossaryプラグインを作成する作業を5月1日より開始しています。この作業を通じてRedmineプラグイン作成に習熟できたなら、既存のGlossaryプラグインRedmine 4.0(Rails 5.1)対応の修正をすることも容易になるだろうし、あるいはゼロから作った新Glossaryプラグインを主とし、既存のデータベースのマイグレーションを用意するのもの可能になるのかと思います。

ゼロからGlossaryプラグインを作る過程を、次のWikiに絶賛記載途中です。

Redmine Glossaryプラグイン再構築 - ソフトウェアエンジニアリング - Torutk

ステップバイステップで小さなプラグインから開始しています。最初は、モデルクラス1つ、コントローラー1つ、アクションに対応するビューが少々で、プロジェクトとの関連もない、権限の設定もないシンプルなものを作っています。本日時点でやっと一通り出来てきました。次はモデルクラスを2つに増やすところです。

ゼロからの作成作業をしていて、気づいたこと、知ったことなどを時々こちらの日記に書いていきます。

国際化対応テキストの変換メソッド名

Redmineのコードでは、ビュー(.erb)でよく見かけるのが"l"(エル)メソッドです。

<%= link_to l(:button_edit) ... %>

Rails関係を調べると、RailsI18n.translateメソッドの省略(ヘルパーメソッド)でtが、I18n.localizeメソッドの省略でlが利用できます。localaize(l)は、日付・時刻などをロケールに合わせた表現に変換するものです。

Redmineでは、なぜlメソッドを使っているのかとても悩みました。tの間違いでは?でもならなぜ正常に機能しているのか不思議でした。

調べると、Redmineのlメソッドは内部でRailsI18n.tを呼び出していました。
最初RedmineのlとRailsのlと同じ名前の関数で混同していましたが、やっと腑に落ちました。それにしても紛らわしいですね。

link_to で確認ダイアログを表示

削除アイコンをクリックしたときに、安全のため(?)、確認ダイアログを表示することがあります。

以前の書き方は、

<%= link_to l(:button_delete), hello_path, :confirm => l(:text_are_you_sure),
 :method => :delete, :class => 'icon icon-del') %>

のように、confirmをキーとするハッシュを引数に指定していました。

Rails 4.1でこのconfirmをキーとしたハッシュは廃止(削除)となっており、代替記述として次のようにdataをキーとしたハッシュでその中にconfirmをキーとしたハッシュを指定します。

<%= link_to l(:button_delete), hello_path, method: :delete,
 data: {confirm: l(:text_are_you_sure)}, class: 'icon icon-del' %>

ハッシュの書き方は、=> を使う記法と、:を使う記法があり、後者はruby 1.9で導入されたものです。Redmine 2.xはRails 3ベースでruby 1.8をサポートする必要があり、=>を使う記法でした。Redmine 3.xでRails 4.2ベースになった際、Rails 4.2がruby 1.9.3以降のサポートとなったので、Redmine 3.x以降を対象にするならハッシュの書き方に:を使う記法を使用できるようになります。