The*_*pes 1 ruby refactoring controller model ruby-on-rails
我之前问了一个问题,引起了一些很好的回应.
在那里给出的一些建议的背面,我尝试移动以下控制器逻辑
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
Run Code Online (Sandbox Code Playgroud)
进入模型,如下:
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
Run Code Online (Sandbox Code Playgroud)
我从before_save回调中调用它.
默认情况下,consulted_legal和consulted_marketing属性都设置为false而不是null,这就是为什么我在这里测试== false或true,而不是询问
if consulted_legal?
Run Code Online (Sandbox Code Playgroud)
例如.
但是,这种逻辑似乎不起作用.如果我检查对象,状态不会被设置为任何东西.谁能发现为什么会发生这种情况?例如,我是否了解了模型中属性访问的错误?
TIA
而不是status =尝试self.status =.我发现我需要用来self.改变模型中的模型属性.
最后还有更好errors.empty?的方法true,所以如果你errors.add_to_base将来使用,你的set_status方法就可以中止保存了.
编辑:
您可能还想结帐acts_as_state_machine.它看起来像是你正在做的插件.