tutorial software rails llaves guias generate foraneas espaƱol ruby-on-rails ruby refactoring model controller

ruby on rails - software - Mover las reglas comerciales al modelo



ruby on rails software (2)

¿Estás configurando los parámetros de la entrada del usuario?

Si no están definidos como columnas de base de datos booleanas, entonces les asignará una cadena, que nunca será igual a verdadero.

Hice una pregunta anterior que provocó algunas excelentes respuestas.

Aquí está la pregunta anterior

En la parte posterior de algunos consejos dados allí, he intentado mover la siguiente lógica de controlador

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

en el modelo, como tal:

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

Lo estoy llamando desde una devolución de llamada before_save.

Como valor predeterminado, los atributos consulted_legal y consulta_marketing se establecen en falso y no nulo, por lo que estoy probando == falso o verdadero aquí, en lugar de preguntar

if consulted_legal?

por ejemplo.

Sin embargo, esta lógica no parece estar funcionando. Si inspecciono el objeto, el estado no se establece en nada, nunca. ¿Alguien puede ver por qué esto podría estar pasando? ¿Tengo cómo acceden mal a los atributos en modelos, por ejemplo?

TIA


En lugar de status = prueba self.status = . He descubierto que necesitaba usar mi self. para cambiar el atributo de un modelo dentro del modelo.

También es mucho mejor tener errors.empty? al final en lugar de true , por lo que si alguna vez usa errors.add_to_base en el futuro, su método set_status está listo para abortar.

Editar:
Es posible que también desee verificar acts_as_state_machine . Parece un complemento para exactamente lo que estás haciendo.