Plugin

Na bazie tutoriala: http://www.redmine.org/wiki/1/Plugin_Tutorial postanowiłem napisać plugin do RedMine.
Ma to być prosta lista todo użytkowników.
W katalogu vendor/plugins/redmine_todos/app/models mam klasę Todo:

class Todo < ActiveRecord::Base belongs_to :user end
Pytanie brzmi: Jak do klasy User, która znajduje się w app/models “domieszkować” has_many :todos? Oczywiście nie chcę modyfikować oryginalnego pliku app/models/User.rb

Jest wiele sposobów, ale na przykład tak:

User.class_eval do has_many :todos end
Można jeszcze to zamknąć w module:

[code]module UserModifications
def self.included(base)
base.class_eval do
has_many :todos
end
end
end

User.send(:include, UserModifications)[/code]

[quote=drogus]Jest wiele sposobów, ale na przykład tak:

User.class_eval do has_many :todos end
[/quote]
Próbowałem już tego rozwiązania. Kod umieściłem w pliki vendor/plugins/redmine_todos/init.rb
Niestety aplikacja bardzo dziwnie się zachowywała: po uruchomieniu serwera pierwszy request działał poprawnie, za drugim wyrzucany był wyjątek, że metoda todos nie istnieje. Wygląda na to, że za drugim requestem klasa app/models/user.rb nadpisywała, to co zdefiniowałem w kodzie pluginu…
W którym miejscu dokładnie powinien być umieszczony ten kod?

[quote=drogus]Można jeszcze to zamknąć w module:

[code]module UserModifications
def self.included(base)
base.class_eval do
has_many :todos
end
end
end

User.send(:include, UserModifications)[/code]
[/quote]
Gdzie powinien być umieszczony powyższy kod?
Spróbuję tego rozwiązania i dam znać.