Buenas. A ver si alguien sabe algo.
pongamos este caso:
class User < ActiveRecord::Base
has_many :users_friends
has_many :friends, :through => :users_friends, :extend =>
UsersProperties
end
class UsersFriend < ActiveRecord::Base
belongs_to :user
belongs_to :friend, :class_name => “User”, :foreign_key => “friend_id”
end
class UsersFriendSweeper < ActionController::Caching::Sweeper
observe UsersFriend
def after_save(user_relatioship)
expire_fragment(“barra_de_amigos_#{user_relatioship.user.id}”)
end
end
EOF
El sweeper funciona normalmente, excepto en casos como:
User.find_by_username(“guillermo”).friends <<
User.find_by_username(“cientifico”)
Donde el swepper no es llamado. Me parece lógico (salvo que esté
metiendo la pata), que al no intervenir el model UsersFriend
(internamente tirará de joins de la base de datos), directamente el
Observer no se ejecute.
Lo que pregunto es ¿Qué soluciones le véis a este problema? Cuando
digo soluciones, me refiero a soluciones algo más limpias que poner el
código en la acción, o no usar las relaciones de rails y crear
amistades a la vieja usanda UsersFriend.create(:user =>
User.find_by_username(“guillermo”), :friend=>
User.find_by_username(“cientifico”)). Estoy pensando en alguna forma
de hacer que AR invoque el swepper a mano… pero no se me ocurre.
Muchas gracias.