Ruby on rails 将业务规则移动到模型中
我早些时候问了一个问题,得到了一些很好的回答 根据这里给出的一些建议,我尝试移动以下控制器逻辑Ruby on rails 将业务规则移动到模型中,ruby-on-rails,ruby,refactoring,model,controller,Ruby On Rails,Ruby,Refactoring,Model,Controller,我早些时候问了一个问题,得到了一些很好的回答 根据这里给出的一些建议,我尝试移动以下控制器逻辑 if params[:concept][:consulted_legal] == 0 && params[:concept][:consulted_marketing] == 1 @concept.attributes = {:status => 'Awaiting Compliance Approval'} elsif params[:concept][:consulte
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
我是从一个“保存前”回调中调用的
默认情况下,consulted_legal和consulted_marketing属性都设置为false和notnull,这就是为什么我在这里测试==false或true,而不是询问
if consulted_legal?
比如说
然而,这种逻辑似乎不起作用。如果我检查对象,状态永远不会设置为任何值。有人知道为什么会发生这种情况吗?例如,我知道在模型中如何错误地访问属性了吗
TIA而不是status=尝试自我。status=。我发现我需要利用自我。在模型中更改模型的属性
有错误也更好。空?因此,如果将来使用errors.add\u to\u base,则set\u status方法将准备中止保存
编辑:
您可能还想退房。它看起来就像是一个插件,完全适合你所做的事情。而不是status=试试self.status=。我发现我需要利用自我。在模型中更改模型的属性
有错误也更好。空?因此,如果将来使用errors.add\u to\u base,则set\u status方法将准备中止保存
编辑:
您可能还想退房。它看起来就像是一个插件,完全适合您所做的事情。您是否从用户输入中设置参数
如果它们没有定义为布尔数据库列,那么您将为它们分配一个字符串,该字符串永远不会等于true。您是否根据用户输入设置参数
如果它们没有定义为布尔数据库列,那么您将为它们分配一个字符串,该字符串永远不会等于true。我怀疑他有这些列,这些列来自控制器。我怀疑他有这些列,也就是他们来自控制器。