No puedo encontrar el problema con esta advertencia de rubocop Do not chain ordinary method call after safe navigation operator.
price_array = user&.user_price_fluctuation&.market_price&.sort << user_price&.sortSolo piense en lo que hace el operador de navegación segura: se evalúa como nil si el objeto al que se llama el método es nil .
Entonces, si foo no es nil , entonces foo&.bar llamará a bar en foo , pero si foo es nil , entonces foo&.bar es nil .
Es por eso que no tiene sentido encadenar una llamada de método ordinaria después del operador de navegación segura:
foo&.bar.baz Si foo no es nil , esto funcionará, pero si foo es nil , entonces foo&.bar también es nil y está intentando llamar a nil.baz , que no funciona. En otras palabras: el código solo funciona si ya sabes que foo no es nil , ¡pero entonces no necesitarías el operador de navegación segura en primer lugar!
Lo mismo es cierto para su código: si cualquier user o cualquiera de los valores intermedios en la cadena es nil , entonces está llamando a nil << something , que no funciona. Debe asegurarse de que toda la cadena utilice el operador de navegación segura:
price_array = user&.user_price_fluctuation&.market_price&.sort&.<<(user_price&.sort) Por supuesto, la solución aún mejor es olvidarse del operador de navegación segura y, en cambio, averiguar de dónde provienen esos valores nil en primer lugar y arreglarlo.