问题:

我的问题目前有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


希望这可以帮助!

07-25 23:06
查看更多