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 回答