cómo update_attributes con las condiciones?
-
25-09-2019 - |
Pregunta
Necesito atributos de actualización, pero sólo para las filas con las condiciones específicas como
["recipient_id = ? and inbox_id = ? and status='unread'", current_user.id, @inbox.id]
¿Cómo lo hago?
Solución
Depende de si desea hacer una actualización de SQL a granel, o hacer una actualización sobre cada modelo que también llama la validación y la cadena de devolución de llamada normal.
Si desea crear una instancia de los objetos y ejecutar la cadena de devolución de llamada hacer:
Model.find(:all, :conditions => ["recipient_id = ? and inbox_id = ? and status='unread'", current_user.id, @inbox.id]).each do |obj|
obj.update_attributes(...)
end
Si usted quiere hacer la actualización SQL:
Model.update_all("attr1='something', attr2=true,...", ["recipient_id = ? and inbox_id = ? and status='unread'", current_user.id, @inbox.id])
Asegúrese de utilizar el formulario variedad de condiciones para asegurar a escapar correctamente su SQL.
Otros consejos
También puede hacer la actualización SQL masa utilizando condiciones where
, que me parece ser más fácil de leer.
Model.where(recipient_id: current_user.id)
.where(inbox_id: @inbox.id)
.where(status: 'unread')
.update_all("attr1='something_new'")
Model.update_all("foo='bar'", "recipient_id = #{current_user.id} and inbox_id = #{@inbox.id} and status='unread'")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow