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
[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ć.