gpt4 book ai didi

ruby-on-rails - 将业务规则移动到模型中

转载 作者:太空宇宙 更新时间:2023-11-03 17:19:47 25 4
gpt4 key购买 nike

我之前问了一个问题,得到了一些很好的回应。

Here's the earlier question

根据那里给出的一些建议,我尝试移动以下 Controller 逻辑

 if params[:concept][:consulted_legal] == 0 && params[:concept][:consulted_marketing] == 1
@concept.attributes = {:status => 'Awaiting Compliance Approval'}
elsif params[:concept][:consulted_marketing] == 0 && params[:concept][:consulted_legal] == 1
@concept.attributes = {:status => 'Awaiting Marketing Approval'}
elsif params[:concept][:consulted_marketing] == 0 && params[:concept][:consulted_legal] == 0
@concept.attributes = {:status => 'Awaiting Marketing & Legal Approval'}
else
@concept.attributes = {:status => 'Pending Approval'}
end

进入模型,如下所示:

def set_status
if status.blank?
if (consulted_legal == true) && (consulted_marketing == true)
status = "Pending Approval"
elsif (consulted_legal == true) && (consulted_marketing == false)
status = "Awaiting Marketing Approval"
elsif (consulted_legal == false) && (consulted_marketing == true)
status = "Awaiting Legal Approval"
elsif (consulted_legal == false) && (consulted_marketing == false)
status = "Awaiting Marketing & Legal Approval"
end
end
true # Needs to return true for the update to go through
end

我是从 before_save 回调中调用它的。

默认情况下,consulted_legal 和 consulted_marketing 属性都设置为 false 而不是 null,这就是为什么我在这里测试 == false 或 true,而不是询问

if consulted_legal?

例如。

然而,这个逻辑似乎并不奏效。如果我检查对象,状态不会被设置为任何东西,从来没有。任何人都可以发现为什么会发生这种情况吗?例如,我知道模型中的属性是如何被错误访问的吗?

TIA

最佳答案

尝试使用 self.status = 而不是 status =。我发现我需要使用 self. 来更改模型中模型的属性。

在末尾使用 errors.empty? 而不是 true 也会好得多,所以如果您曾经在其中使用 errors.add_to_base future ,您的 set_status 方法已准备好中止保存。

编辑:
您可能还想查看 acts_as_state_machine .它看起来像是一个插件,完全适合您正在做的事情。

关于ruby-on-rails - 将业务规则移动到模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/473325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com