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?

¿Fue útil?

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
scroll top