当前位置:  开发笔记 > 后端 > 正文

将业务规则转移到模型中

如何解决《将业务规则转移到模型中》经验,为你挑选了1个好方法。

我之前问了一个问题,引起了一些很好的回应.

这是早先的问题

在那里给出的一些建议的背面,我尝试移动以下控制器逻辑

 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



1> Samuel..:

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

最后还有更好errors.empty?的方法true,所以如果你errors.add_to_base将来使用,你的set_status方法就可以中止保存了.

编辑:
您可能还想结帐acts_as_state_machine.它看起来像是你正在做的插件.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有