问题:
我的问题目前有3个自定义字段,比如说FieldA(选择列表),FieldB(无关)和FieldC(文本)。
需要发生的是,保存后,FieldC的值为<FieldA>-<date in Ymd>-<number from database>
例如,假设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
之前添加一个钩子侦听器,以实现预保存的钩子: 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包含当前值,自定义字段描述和自定义对象。
所需的值我会读取并通过排序进行更改。可能不是最好的变体,但不久前我就熟悉了红宝石语言。
读取自定义字段值的方法:
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
希望这可以帮助!