首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >红矿山挂插件

红矿山挂插件
EN

Stack Overflow用户
提问于 2014-03-27 19:33:41
回答 1查看 698关注 0票数 0

大家晚上好!我被一个插件困住了,我真的很想得到一些建议。

问题所在

我编写了一个简单的插件,它通过添加带有一些复选框的新字段集来修改创建新项目的表单。我在插件目录中的文件中写了所有的登录。到现在为止还好。一切都很好,除了把文件发送给我的同事时,有些东西他们不喜欢。似乎他们不太喜欢修改核心文件的想法,以使工作,因为事情可能会变得一团糟,当他们更新版本的Redmine。我已经设法将核心文件中注入的代码减少到仅3行(3行,ikr!!),但这是我所能做到的。

projects_controller.rb

代码语言:javascript
运行
复制
selected_tasks = params[:checkListItems].collect {|id| id.to_i}
call_hook(:add_tasks_after_project_save, { :selected_ids => selected_tasks, :project => @project})

和项目的形式/views/projects/_form.html.erb

代码语言:javascript
运行
复制
<%= call_hook(:append_check_list_tasks, { :project => @project }) %>

如果有一种方法可以删除我在projects_controller.rb中使用的代码,并且只使用文件中的代码,我不会感到惊讶,但是我不太确定我放在form.html中的钩子是什么。

这个问题简单地说

有没有办法让我的插件像现在一样工作,但不需要修改红矿山的核心文件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-27 20:42:50

1如何修补表格。

你可以用核心的钩子。这是钩表

或者,如果您需要修补没有钩子的视图,则可以使用gem deface。请看这个提交

2如何修补控制器。这是一个问题,因为在本例中不能使用before_filteralias_method_chain -项目是在方法内部初始化的。

我认为您希望在创建(或之前)项目之后执行一些操作,并且您需要了解selected_tasks。我的想法是遵循standart工作流并通过新的虚拟attr_writer传递这些值来建模。

我认为你应该做的是:

  • attr_writer添加到建模项目中
  • 定义新的safe_attribute smth,如 (我认为Redmine不允许分配不安全的属性,参见)
  • 添加before_createafter_create回调,以通过attr_writer处理已接受的参数。

当然,这只是一个计划,我无法检查它是否有效:)

计划B

有一个新的(更简单的)想法,如何修补。可以将修补代码放置到after_filter中,在那里您可以检查是否已成功创建@project并处理selected_tasks

您可以通过插件添加after_filter 这边请来修补内核。不要忘记将您的补丁程序包括到控制器(请参阅 )

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22697455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档