在Redmine钩子中更改自定义字段的值

问题:

我的问题目前有3个自定义字段,比方说FieldA(选择列表),FieldB(不相关)和FieldC(文本)。

需要发生的是,在保存时,FieldC取值--

例如,我们假设FieldA的值为“Test”,今天是2015年1月8日。然后FieldC应该是Test-20150108-001,其中001来自数据库中的自定义表,这是FieldA的每个值的唯一值,并每年重置。

我现在做了什么:

我已经使用命令行脚本来生成插件

  ruby script/rails generate redmine_plugin subticket 

和模型通过

 ruby script/rails generate redmine_plugin_model subticket subticket_ids fa:string lastnum:integer year:integer 

(其中fa是FieldA的值,lastnum是用于该值的最后一个数字,year是lastnum适用的当前年份)。

然后我继续在init.rb前面添加一个钩子监听器,以便实现presave钩子:

  require_dependency 'subticket_hooks' 

并使用以下内容创建了文件lib/subticket_hooks.rb

 class SubticketHooksListener < Redmine::Hook::ViewListener def controller_issues_edit_before_save(context={}) issue = context[:issue] end end 

但是,我找不到任何有关如何在此处访问/写入自定义字段值的文档。 仍然致力于使模型工作,但我认为文档很清楚,我可以进行实验(当然欢迎任何信息!)

请注意,这超出了我的能力,因为我的核心专业知识是完全不同的语言 – 慢慢来!

我有同样的任务

我的解决方案:每个可自定义的redmine对象都有custom_field_values字段,该值是CustomFieldValue数组。 CustomFieldValue包含当前值,自定义字段描述和自定义对象。

需要的值我读取并通过整理来改变。 可能它不是最好的变种,但我很久以前就熟悉了ruby语言。

读取自定义字段值的方法:

 def object_custom_field_value(object, field_name) object.custom_field_values.each do |field| if field.custom_field.name == field_name return field.value end end end 

并改变:

 def object_custom_field_set_value(object, field_name, value) object.custom_field_values.each do |field| if field.custom_field.name == field_name field.value = value end end end 

希望这可以帮助!