我正在为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'):
出了什么问题?
答案 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
其他人也是如此。希望这对某人有用。谢谢!