我之前问了一个问题,引起了一些很好的回应。
在那里给出的一些建议的背面,我尝试移动以下控制器逻辑
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
答案 0 :(得分:6)
而不是status =
尝试self.status =
。我发现我需要使用self.
来更改模型中的模型属性。
最后让errors.empty?
代替true
要好得多,所以如果您以后使用errors.add_to_base
,那么set_status
方法就可以中止了保存。
修改强>
您可能还想查看acts_as_state_machine
。它看起来像是你正在做的插件。
答案 1 :(得分:1)
您是否从用户输入设置参数?
如果它们没有被定义为布尔数据库列,那么你将为它们分配一个字符串,它永远不会等于true。