我之前问了一个问题,引起了一些很好的回应.
这是早先的问题
在那里给出的一些建议的背面,我尝试移动以下控制器逻辑
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
而不是status =
尝试self.status =
.我发现我需要用来self.
改变模型中的模型属性.
最后还有更好errors.empty?
的方法true
,所以如果你errors.add_to_base
将来使用,你的set_status
方法就可以中止保存了.
编辑:
您可能还想结帐acts_as_state_machine
.它看起来像是你正在做的插件.