【问题标题】:Moving business rules into model将业务规则移入模型
【发布时间】:2009-01-23 15:29:56
【问题描述】:

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

Here's the earlier question

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

 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

【问题讨论】:

    标签: ruby-on-rails ruby refactoring model controller


    【解决方案1】:

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

    最后使用errors.empty? 而不是true 要好得多,因此如果您将来使用errors.add_to_base,您的set_status 方法就可以中止保存。

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

    【讨论】:

      【解决方案2】:

      您是从用户输入中设置参数吗?

      如果它们没有被定义为布尔数据库列,那么你将给它们分配一个字符串,它永远不会等于 true。

      【讨论】:

      • 我怀疑他有那些列,那是它们来自控制器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      • 2012-04-03
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多