繁体   English   中英

将业务规则转化为模型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM