Rails Как добавить наблюдателя только в один пользовательский метод - PullRequest
0 голосов
/ 26 октября 2011

Я хотел бы создать наблюдателя, который будет наблюдать только один пользовательский метод.

У меня есть модель Baner. Для каждого вызова метода image я бы хотел увеличить поле pageview.

class Baner < ActiveRecord::Base

has_attached_file :image

def pageview_inc
  pageview += 1
  save
end

alias old_image image

def image
  old_image
end
end

Возможно ли установить наблюдателя только для одного пользовательского метода? Что после image вызова метода pageview_inc будет выполнен метод.

EDIT

Если я изменю этот метод на

  def image                                                            
    old_image
    self.pageview   += 1
    self.save!
  end

И я получаю stack level too deep.

Тот же эффект для

  def image    
    self.pageview   += 1
    self.save!                                                        
    old_image
  end

Ответы [ 2 ]

1 голос
/ 26 октября 2011
class Baner < ActiveRecord::Base

  has_attached_file :image

  alias_method :old_image, :image

  def image
    increment!(:pageview)
    old_image
  end
end

Две вещи здесь:

1) см. Этот вопрос: Должен ли я использовать псевдоним или alias_method?

2) increment! обновит счетчик, не сохраняя всю модель, избегая возможных вызовов image в процессе его сохранения (таким образом вызывая рекурсивный цикл).

0 голосов
/ 26 октября 2011

Это должно достичь вашей цели:

def image
  old_image
  write_attribute("pageview", pageview + 1)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...