Jay*_*667 29 ruby sql ruby-on-rails redmine
复制一个问题及其子问题是一个本机内置功能,因此工作得很好.
但有多种方法可以多次这样做?就像重新创造一个问题(包括它的孩子)二十或五十次?
编辑2
这个新功能应该可以通过Redmine界面访问,并兼容任何浏览器.
它是一个全新的插件,内置复制功能的扩展,对一个PHP-script或其他任何东西的调用并不重要.由于兼容性(网络,浏览器等),我想完全服务器端修改是唯一的方法.
必须更改默认插件的哪些部分(在投票教程中创建)或核心元素?
我在哪里可以找到本机问题复制功能的代码?
或者 - 如果所有这些都太复杂 - 我如何编写我的插件指向直接PHP操作SQL数据库的文件?
编辑:
澄清:就像正常的复制功能(在上下文菜单或右上角的链接中,我不在乎)我想复制一个问题及其子问题n次.要让用户设置金额n,任何用户编号输入都可以,例如文本框,弹出窗口等.
我认为最简单的方法就是从redmine源码修改开始。一旦它起作用,您就可以继续尝试将此功能提取到插件中。
请注意,我不是 ruby 开发人员,所以下面的一些内容只是我的猜测。但我之前做了一些像这样的小redmine修改,希望我的想法能有用。
如果您熟悉一些 MVC 框架(适用于任何语言),这也会更容易,因为它们大多具有类似的结构,包括路由、控制器、视图和模型。
复制单个问题的链接如下所示://redmine.myserver.com/projects/myapp/issues/12407/copy。
我的想法是向这个链接添加一个num_copies参数,并在代码中使用它来创建许多副本。
您不需要 UI,一旦实现该功能将像这样工作:
copy它的行动?num_copies=XX参数添加到 URL ( //redmine.myserver.com/projects/myapp/issues/12407/copy?num_copies=50) 中,然后按“Enter”重新加载表单num_copies参数创建多个副本现在,如何做到这一点。我指的是github上的redmine镜像,它看起来很新鲜。
.../copy链接的处理位置当您打开表单复制问题时,您将看到如下表单:
<form action="/projects/myapp/issues" class="new_issue" id="issue-form" method="post">
<input id="copy_from" name="copy_from" type="hidden" value="12407">
<div class="box tabular">
<div id="all_attributes">
...
</form>
Run Code Online (Sandbox Code Playgroud)
请注意表单操作,它指向/issues链接并将提交copy_from参数(这是我们正在复制的问题的 ID)。
我们可以先去检查一下config/routes.rb,但我们只能猜测我们需要controllers/issues_controller.rb
搜索使用copy_from参数的地方。
你会看到build_new_issue_from_params方法。现在搜索它的用法,你会发现:
before_filter :build_new_issue_from_params, :only => [:new, :create]
Run Code Online (Sandbox Code Playgroud)
从它的外观来看,我猜它是在new和create操作之前调用的。查看新的和创建的定义,该new操作呈现新的问题表单,并且该create操作处理表单帖子。
num_copies3)在表单中添加参数找到新问题操作使用的视图文件。这里有一个新问题表单的模板,尝试添加类似于copy_from 的参数:num_copies
<%= title l(:label_issue_new) %>
<%= call_hook(:view_issues_new_top, {:issue => @issue}) %>
...
<%= error_messages_for 'issue' %>
<%= hidden_field_tag 'copy_from', params[:copy_from] if params[:copy_from] %>
Run Code Online (Sandbox Code Playgroud)
在这里,我不能 100% 确定如果您为 `num_copies 添加类似的行,它是否会起作用。您可能还需要修改路线。
完成后,您应该会得到如下所示的新问题表单:
<form action="/projects/myapp/issues" class="new_issue" id="issue-form" method="post">
<input id="copy_from" name="copy_from" type="hidden" value="12407">
<input id="copy_from" name="num_copies" type="hidden" value="50">
<div class="box tabular">
<div id="all_attributes">
...
</form>
Run Code Online (Sandbox Code Playgroud)
num_copies参数它应该在创建操作中完成:
def create
...
call_hook(:controller_issues_new_before_save, { :params => params, :issue => @issue })
@issue.save_attachments(params[:attachments] || (params[:issue] && params[:issue][:uploads]))
if @issue.save
...
end
Run Code Online (Sandbox Code Playgroud)
在这里,您已经@issue在build_new_issue_from_params方法中创建了变量,您需要做的是检查num_copies参数是否已设置,如果已设置,则@issue在循环中复制/保存以创建其他副本。
我无法提供确切的代码片段,但它应该不会很复杂。检查方法中的这段代码bulk_update,它看起来像你需要的:
issue = orig_issue.copy({},
:attachments => copy_attachments,
:subtasks => copy_subtasks,
:link => link_copy?(params[:link_copy])
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1602 次 |
| 最近记录: |