Ruby / Redmine:从问题主题和适当的自定义字段编译哈希
Ruby / Redmine: compile a hash from issue subjects and appropriate custom fields
我正在使用 Redmine 和 Computed Custom Field plugin。
该插件提供了计算自定义字段的可能性,它接受 ruby 代码进行计算。
在 Redmine 中,我有一个项目 (Project_id = 11),我在其中为每个问题在单独的自定义字段中计算产品成本。它看起来像这样:
- 每期都有一个自定义字段 (cf_id = 31) 用于选择产品:梨、菠萝、西红柿、椰子。
- 每期都有一个自定义字段 (cf_id = 32) 用于输入商品数量(件)。
- 每期都有一个自定义字段 (cf_id = 33) 用于输入货物的重量(磅)。
- 每个问题都有一个 computed 自定义字段 (cf_id = 34),其中的公式计算产品的成本。
计算的自定义字段 (cf_id = 34) 中的公式包括两个带有产品价格的哈希值(取决于产品类型):
products_by_weight = {
"Pears" => [110],
"Tomatoes" => [120]
}
products_by_pieces = {
"Pineapples" => [130,300],
"Coconuts" => [140,200]
}
然后我的公式检查cf_id = 31中选择的产品属于第一或第二哈希并执行相应的计算:
- 如果使用第一个列表中的商品,则价格乘以重量 (cf_id = 32)
- 或者如果使用第二个列表中的商品,则将价格乘以数量 (cf_id = 33)。 "products_by_pieces" hash 的值数组中的第二个值是每件的重量限制。如果重量除以限制大于 cf_id = 32 中输入的数量,则方案 2 中的公式将使用此数量而不是 cf_id = 32 中指示的数量。
现在我试图将这些变量移到公式之外。 我做了一个项目 (Project_id = 22),我想在其中将这些变量保存为问题。
我是这样想象的:
- 问题的名称是产品的名称
- 每期都有两个自定义字段:
- cf_id = 41是产品价格
- cf_id = 42为每件限重
- 为每个问题分配一个类别:"products_by_weight" 或 "products_by_pieces"。
我想在项目 11 的问题 cf_id = 34 中编译现在包含在我的公式中的相同哈希值,但是自动从项目 22 的问题中编译,同时考虑到类别。
到目前为止,我所做的只是从项目22的此类问题中找到已知产品的价格。
price = Project.find(22).issues.where(subject: "Pineapples").first.try(:custom_field_value,41)
但这没有任何帮助,需要在添加每个新产品时更改代码。
我是编程新手 Ruby,所以我正在尝试 Redmine classes,并尝试用这样的代码编译哈希:
Issue.by_category(Project.find(22))
但结果,到目前为止我只收到了这个:
[{"status_id"=>"27", "closed"=>true, "category_id"=>"1", "total"=>"10"}]
这和我期待的结果完全不一样。
任何帮助都会有所帮助!
UPD.
现在,我的变量(产品价格和重量限制)在一个散列中,它直接是计算字段 34 代码的一部分。但我不希望这些变量(价格和重量限制)成为代码的一部分。我想在单独的项目 (22) 中将它们作为具有相应自定义字段(41 和 42)的问题进行管理 - 这样普通用户就可以在问题中更改或添加这些值,而无需更改计算的自定义字段的代码(34)。所以我想根据项目 22 的问题编译该哈希,而不是直接编写它。我假设是这样的,即项目 22 的主题应该成为自定义字段 [41,41] 的键和数组 - 值。这样做时,我需要两个由分配的类别("goods_by_weight" 和 "goods_by_pieces")确定的单独哈希值,因为它们的计算方式不同,在项目 22 中,我将其他变量写为问题中自定义字段的值不同的类别。
我通过以下方式解决了这个问题。
按照计划,现在我将产品价目表作为问题存储在单独的项目 (ID 22) 中。要在计算的自定义字段的公式中获取所选类别 (A) 的所有产品的价格散列,如果是项目问题 (ID 11),我执行以下操作:
PRICELIST_PROJECT_ID = 22
CATEGORY_A_ID = 1
PRICE_VALUE_CFID = 41
WLIMIT_VALUE_CFID = 42
delimiter = ','
pricelist_issues_cat_a = Project.find(PRICELIST_PROJECT_ID).issues.select { |rate| rate.category_id == CATEGORY_A_ID }
cata_products_names = []
cata_products_pvalues = []
for i in (0..pricelist_issues_cat_a.size-1) do
cata_products_names[i] = pricelist_issues_cat_a[i].try(:subject)
cata_products_pvalues[i] = pricelist_issues_cat_a[i].try(:custom_field_value,PRICE_VALUE_CFID).split(Regexp.union(delimiter)).map(&:to_f)
end
cata_price_hash = Hash[cata_products_names.zip(cata_products_pvalues)]
产品类别 B 的方法相同。
不确定这是否是最有效的方法,但它对我有用。
我正在使用 Redmine 和 Computed Custom Field plugin。
该插件提供了计算自定义字段的可能性,它接受 ruby 代码进行计算。
在 Redmine 中,我有一个项目 (Project_id = 11),我在其中为每个问题在单独的自定义字段中计算产品成本。它看起来像这样:
- 每期都有一个自定义字段 (cf_id = 31) 用于选择产品:梨、菠萝、西红柿、椰子。
- 每期都有一个自定义字段 (cf_id = 32) 用于输入商品数量(件)。
- 每期都有一个自定义字段 (cf_id = 33) 用于输入货物的重量(磅)。
- 每个问题都有一个 computed 自定义字段 (cf_id = 34),其中的公式计算产品的成本。
计算的自定义字段 (cf_id = 34) 中的公式包括两个带有产品价格的哈希值(取决于产品类型):
products_by_weight = {
"Pears" => [110],
"Tomatoes" => [120]
}
products_by_pieces = {
"Pineapples" => [130,300],
"Coconuts" => [140,200]
}
然后我的公式检查cf_id = 31中选择的产品属于第一或第二哈希并执行相应的计算:
- 如果使用第一个列表中的商品,则价格乘以重量 (cf_id = 32)
- 或者如果使用第二个列表中的商品,则将价格乘以数量 (cf_id = 33)。 "products_by_pieces" hash 的值数组中的第二个值是每件的重量限制。如果重量除以限制大于 cf_id = 32 中输入的数量,则方案 2 中的公式将使用此数量而不是 cf_id = 32 中指示的数量。
现在我试图将这些变量移到公式之外。 我做了一个项目 (Project_id = 22),我想在其中将这些变量保存为问题。
我是这样想象的:
- 问题的名称是产品的名称
- 每期都有两个自定义字段:
- cf_id = 41是产品价格
- cf_id = 42为每件限重
- 为每个问题分配一个类别:"products_by_weight" 或 "products_by_pieces"。
我想在项目 11 的问题 cf_id = 34 中编译现在包含在我的公式中的相同哈希值,但是自动从项目 22 的问题中编译,同时考虑到类别。
到目前为止,我所做的只是从项目22的此类问题中找到已知产品的价格。
price = Project.find(22).issues.where(subject: "Pineapples").first.try(:custom_field_value,41)
但这没有任何帮助,需要在添加每个新产品时更改代码。
我是编程新手 Ruby,所以我正在尝试 Redmine classes,并尝试用这样的代码编译哈希:
Issue.by_category(Project.find(22))
但结果,到目前为止我只收到了这个:
[{"status_id"=>"27", "closed"=>true, "category_id"=>"1", "total"=>"10"}]
这和我期待的结果完全不一样。 任何帮助都会有所帮助!
UPD. 现在,我的变量(产品价格和重量限制)在一个散列中,它直接是计算字段 34 代码的一部分。但我不希望这些变量(价格和重量限制)成为代码的一部分。我想在单独的项目 (22) 中将它们作为具有相应自定义字段(41 和 42)的问题进行管理 - 这样普通用户就可以在问题中更改或添加这些值,而无需更改计算的自定义字段的代码(34)。所以我想根据项目 22 的问题编译该哈希,而不是直接编写它。我假设是这样的,即项目 22 的主题应该成为自定义字段 [41,41] 的键和数组 - 值。这样做时,我需要两个由分配的类别("goods_by_weight" 和 "goods_by_pieces")确定的单独哈希值,因为它们的计算方式不同,在项目 22 中,我将其他变量写为问题中自定义字段的值不同的类别。
我通过以下方式解决了这个问题。
按照计划,现在我将产品价目表作为问题存储在单独的项目 (ID 22) 中。要在计算的自定义字段的公式中获取所选类别 (A) 的所有产品的价格散列,如果是项目问题 (ID 11),我执行以下操作:
PRICELIST_PROJECT_ID = 22
CATEGORY_A_ID = 1
PRICE_VALUE_CFID = 41
WLIMIT_VALUE_CFID = 42
delimiter = ','
pricelist_issues_cat_a = Project.find(PRICELIST_PROJECT_ID).issues.select { |rate| rate.category_id == CATEGORY_A_ID }
cata_products_names = []
cata_products_pvalues = []
for i in (0..pricelist_issues_cat_a.size-1) do
cata_products_names[i] = pricelist_issues_cat_a[i].try(:subject)
cata_products_pvalues[i] = pricelist_issues_cat_a[i].try(:custom_field_value,PRICE_VALUE_CFID).split(Regexp.union(delimiter)).map(&:to_f)
end
cata_price_hash = Hash[cata_products_names.zip(cata_products_pvalues)]
产品类别 B 的方法相同。
不确定这是否是最有效的方法,但它对我有用。