Вопрос по callback, activerecord, ruby-on-rails, ruby-on-rails-3 – Модель рельсов «before_filter»?

12

Я знаю, что before_filter предназначен только для контроллеров в Rails, но я хотел бы что-то подобное для модели: каждый раз, когда вызывается метод в моей модели, я хотел бы запустить метод, который определяет, должен ли запускаться вызываемый метод. Концептуально примерно так:

<code>class Website < ActiveRecord::Base
  before_filter :confirm_company

  def confirm_company
    if self.parent.thing == false?
      return false
    end
  end

  def method1
    #do stuff
  end

end
</code>

Поэтому, когда я вызываю @ website.method1, он сначала вызовет verify_company, а если я верну false, не будет запускать method1. Есть ли в Rails такая функциональность? Я надеюсь, что я просто упускаю что-то очевидное здесь ...

Да, я думаю, мне нужен обратный вызов. Но ни один из доступных обратных вызовов не может сделать то, что я после. Я не сохраняю, не проверяю, не инициализирую ... Я вызываю метод. Aaron Vegh
Вы можете использовать прокси-объект и делегировать модели, если ваше условие выполнено apneadiving
Ты имеешь в видуActive Record Callbacks? Mischa
увидетьsimonecarletti.com/blog/2010/05/… apneadiving
apneadiving - можете ли вы предоставить более подробную информацию? Не уверен, что вы имеете в виду... Aaron Vegh

Ваш Ответ

2   ответа
1

Вы можете подключить это к любому классу ruby и сделать что-то вроде контроллера.

before_action :foobar, on: [:foo]

https://github.com/EdmundLeex/action_callback

12
class MyModel
    extend ActiveModel::Callbacks
    define_model_callbacks :do_stuff

    before_do_stuff :confirm

    def do_stuff
        run_callbacks :do_stuff do
            #your code
        end
    end

    def confirm
        #confirm
    end
end

что это сработает, но вы можете попробовать, так как у меня сейчас действительно нет времени. Посмотрите на это:http://api.rubyonrails.org/classes/ActiveModel/Callbacks.html

Круто :) Вы можете подумать об извлечении материала в модули, если у вас есть повторяющиеся шаблоны в ваших моделях. Просто мысль.
Это работает именно так, как вы заявили. Это требует, чтобы я касался каждой модели, но это очень чистое решение, учитывая все обстоятельства. Спасибо большое! Aaron Vegh

Похожие вопросы