rails query left includes generate and active ruby-on-rails rails-activerecord

ruby on rails - query - ¿Cómo omitir las devoluciones de llamada de ActiveRecord?



rails sql query (4)

Posible duplicado:
¿Cómo puedo evitar ejecutar callbacks de ActiveRecord?

Tengo un modelo como este

class Vote < ActiveRecord::Base after_save :add_points_to_user ..... end

¿Es posible forzar de algún modo al modelo a omitir la llamada de add_points_to_user cuando se guarda? Posiblemente algo como ActiveRecord#delete vs ActiveRecord#destroy ?


Esto omitirá tus validaciones:

vote.save(:validate => false)

más información here

Para omitir sus devoluciones de llamada y validaciones, puede usar, update_column v (3.1) o update_all

vote = Vote.first vote.update_column(:subject, ''CallBacks'')

Aparentlly esto solo funciona con ActiveRecord 3.1

O:

Vote.where(''id = ?'', YourID).update_all(:subject => ''CallBacks'')

Al final también tienes la opción por fin y esto saltará todo:

execute "UPDATE votes SET subject = ''CallBacks'' WHERE id = YourID"

OK, el último no es tan bonito.


Lo siguiente se aplica a los rieles 2, rieles 3 y rieles 4:

http://guides.rubyonrails.org/v3.2.13/active_record_validations_callbacks.html#skipping-callbacks

Proporciona una lista de métodos que omiten las devoluciones de llamada, explicando por qué es peligroso usarlos sin una consideración cuidadosa. Reimpreso aquí bajo las disposiciones de la licencia de Creative Commons Reconocimiento-Compartir Igual 3.0.

12 omisión de devoluciones de llamada

Al igual que con las validaciones, también es posible omitir las devoluciones de llamadas. Sin embargo, estos métodos se deben usar con precaución, ya que las reglas comerciales importantes y la lógica de la aplicación se pueden mantener en las devoluciones de llamada. Superarlos sin entender las implicaciones potenciales puede conducir a datos no válidos.

  • decremento
  • decrement_counter
  • borrar
  • eliminar todos
  • find_by_sql
  • incremento
  • increment_counter
  • palanca
  • toque
  • update_column
  • actualizar todo
  • update_counters

Para Rails 2, pero no para Rails 3, puede usar estos:

object.send(:create_without_callbacks) object.send(:update_without_callbacks)


Para Rails 3, ActiveSupport::Callbacks te brinda el control necesario. Estaba enfrentando el mismo desafío en un escenario de integración de datos donde las devoluciones de llamada deseables normalmente debían dejarse de lado. Puede restablecer_callbacks en masa, o usar skip_callback para deshabilitar juiciosamente, así:

Vote.skip_callback(:save, :after, :add_points_to_user)

..después de lo cual puede operar en instancias Vote con: add_points_to_user inhibited