0

Redmineでプラグインを書いています。

Redmineの既存のコントローラー内に新しいメソッドを追加したいです。コントローラー名はリポジトリーです。

repositories.rbに次のコードを書きました。

class RepositoriesController < ApplicationController

  def exec_client
    ...
  end

end

routes.rbに次のように記述します。

match '/projects/:id/repository', :controller => 'Repositories', :action => 'exec_client', :via => :post

私のビューでは、 navigation.html.erbに次のように書きました。

<%= button_to_function l(:gerar_build_project), remote_function(:action => 'exec_client', :controller => 'Repositories')%>

クラス RepositoriesController のコードは、もともとファイル repositories_controller.rb に書かれていました。

しかし、ビューで作成したボタンをクリックすると、次のメッセージが表示されます。

AbstractController::ActionNotFound (RepositoriesController のアクション「exec_client」が見つかりませんでした):

何がうまくいかないのですか?

4

1 に答える 1

0

Redmine プラグインでクラスを拡張して新しいメソッドを追加するには、次の手順に従う必要があります。

パス plugin/lib/client に client.rb ファイルを作成しました

#encoding: UTF-8
module RepositoriesPatch
    require_dependency 'repositories_controller'
    def self.included(base)
      base.send(:include, InstanceMethods)
    end
end

module InstanceMethods
  require_dependency 'repositories_controller'
  def exec_client
    [....]
  end
end

Rails.configuration.to_prepare do
  RepositoriesController.send(:include, RepositoriesPatch)
end

上記で、repositores_controller への新しい関数であるパッチを作成し、コマンド .send を使用して挿入しました。

init.rb に次のように記述しました。

  Rails.configuration.to_prepare do
    RepositoriesController.send(:include, RepositoriesPatch)
  end

残りは同じでした。これが誰かに役立つことを願っています。ありがとう!

于 2013-07-24T20:59:10.333 に答える