[英]Moving business rules into model
我早些时候问了一个问题,引起了很大的反响。
根据那里给出的一些建议,我尝试移动以下控制器逻辑
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回调中调用的。
默认情况下,咨询属性和咨询属性都设置为false而不是null,这就是为什么我在这里测试== false或true而不是询问
if consulted_legal?
例如。
但是,这种逻辑似乎不起作用。 如果检查对象,则状态永远不会设置为任何值。 谁能发现为什么会这样? 例如,我是否知道如何在模型中错误地访问属性?
TIA
代替status =
试试self.status =
。 我发现我需要使用self.
更改模型中的模型属性。
有errors.empty?
也更好errors.empty?
最后而不是true
,因此,如果将来使用errors.add_to_base
,则set_status
方法已准备就绪,可以中止保存。
编辑:
您可能还需要签出acts_as_state_machine
。 它看起来像是您正在执行的插件。
您是通过用户输入来设置参数吗?
如果未将它们定义为布尔数据库列,则将为它们分配一个字符串,该字符串永远不会等于true。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.