在我的应用程序中,我有一个模型,它有2个不同的枚举参数。我想在计算中使用这些参数(基本上取每个参数的数据库值并将它们加在一起)并返回结果。理想情况下,我想迭代这些模型对象,对它们的枚举值求和,并使用结果为父对象提供分数。
这是我的模型 - 它用于SWOT分析:
class Swot < ActiveRecord::Base
belongs_to :sales_opportunity, inverse_of: :swots
validates :swot_details, presence: true
validates :sales_opportunity_id, presence: true
enum swot_type: [:strength, :weakness, :opportunity, :threat]
enum swot_importance: [:minimal, :marginal, :noteworthy, :significant, :critical]
before_save :update_opportunity_score
def update_opportunity_score
sales_opportunity.update_swot_score
sales_opportunity.save
end
end
我正在尝试编写update_swot_score函数的代码,但我完全不知道如何实现它。我需要的是能够提取所有强度&#34;并总结swot_importance值(1为&#34;最小,2为&#34;边缘&#34; ... 5为&#34;关键&#34;),然后对&#34;弱点&#做同样的事情34;,&#34;机会&#34;和#34;威胁&#34;在计算中使用总计得分之前。
我一直在玩下面的代码,但现在我完全迷失了我正在做的事情。任何帮助将不胜感激。
def update_swot_score
strength = SalesOpportunity.swots.where("swot_type <> ?", Swot.swot_types[:strength]).each do |strong|
SalesOpportunity.swots.swot_importances[strong.swot_importance]
end
end
答案 0 :(得分:0)
Rails枚举提供了一组有用的选项和整数值。在rails控制台中,运行Swot.swot_importances
并查看。所以,你可以从那个数组中查找:
class Swot < ActiveRecord::Base
belongs_to :sales_opportunity, inverse_of: :swots
validates :swot_details, presence: true
validates :sales_opportunity_id, presence: true
enum swot_type: { strength: 1, weakness: 2, opportunity: 3, threat: 4 }
enum swot_importance: { minimal: 1, marginal: 2, noteworthy: 3,
significant: 4, critical: 5 }
before_save :update_opportunity_score
def update_opportunity_score
sales_opportunity = swot_score
end
def swot_score
Swot.swot_types[swot_type] + Swot.swot_importances[swot_importance]
end
end
请注意,无需在模型中指定self.
。此外,除非您检查返回值,否则始终要使用save!
,因为save
可能会失败。但是在回调之前保存是多余的。此外,您应明确指定枚举的整数值,因为您依赖它们来处理业务逻辑。