在Redmine插件文件中打开现有类

时间:2013-07-17 14:36:52

标签: ruby-on-rails class redmine-plugins

我正在为Redmine写一个插件。

我想在Redmine的现有控制器中添加一个新方法。控制器名称为Repositories。

我在 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'):

出了什么问题?

1 个答案:

答案 0 :(得分:0)

要在Redmine插件中扩展类并添加新方法,您需要按照以下步骤操作:

在路径插件/ 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

其他人也是如此。希望这对某人有用。谢谢!