2013-12-23 2 views
0

Что лучше всего использовать в рельсах для реализации ситуации, когда модель A создана, модель B может наблюдать это и изменять.Независимое наблюдение за событиями модели в Rails

Одно из решений - это какой-то фильтр, такой как after_create в модели A. Однако наличие некоторого кода модели B в модели A кажется плохой практикой.

Другое решение - иметь некоторый код в контроллере модели B, чтобы справиться с этим, что также кажется плохой идеей.

Идеально Модель B или какой-либо независимый класс наблюдателей должны иметь возможность наблюдать за созданием всех моделей A, а затем действовать по мере необходимости.

ответ

1

Update:

Благодаря ОП за указание на то, что это было для Rails4 как вопрос был первоначально помеченный который я упустил из виду. Rails 4 alternative to Observers question здесь, в SO, есть несколько отличных ответов.

Оригинал Ответ:

Это может быть сделано с помощью Observer. Скажите, что вы хотите ModelAObserver, где вы определяете операции, необходимые для ModelB, вы можете создать новый файл app/models/model_a_observer.rb вручную или использовать генератор rails g observer ModelA.

Затем определите необходимые функции обратного вызова в ModelAObserver:

# app/models/model_a_observer.rb 
class ModelAObserver < ActiveRecord::Observer 
    observe :model_a 

    def after_create(new_model_a_record) 
    ... 
    # Operations on ModelB 
    ... 
    end 
end 
+0

Спасибо, что помочь мне. Я использую рельсы 4, в которых наблюдатели устарели, но ваш ответ привел меня к следующему: http://stackoverflow.com/questions/15165260/rails-observer-alternatives-for-4-0 – TrevTheDev

+0

@ user3091013, спасибо за связь. Я добавил короткую заметку в верхней части этого ответа со ссылкой, которую вы опубликовали. – vee

Смежные вопросы