Reputation: 798
I'm just developing a Rails application which will have many Engines. However, I'm not able to edit relationships inside the Engines.
To solve this issue, I want to create a relationships-Gem which will be included in the Application and defines the relationships (see: https://stackoverflow.com/a/11835899/603126).
Let's assume, I have a User (namespaced and isolated) Engine and a Comment (namespaced and isolated) Engine. What I want is to override / extend the relationships inside the relationships-Gem which will share the relationships.
So I added a file /app/models/comment.rb with these lines (to the relationships-Gem):
class Comment < CommentEngine::Comment
belongs_to :user
end
class User < UserEngine::User
has_many :comments
end
If I run my rails application, the relationships won't be established.
What am I missing? How can this be achieved?
Thank you very much in advance
Upvotes: 1
Views: 477
Reputation: 2909
The activesupport-decorators gem can load your decorators for you when the original class is loaded.
Upvotes: 0
Reputation: 798
Ok, so I've found a solution for that.
You can just monkey-patch your Engine with Decorators (you need to put it into config/initializers/initializer_name.rb)
see: Extending a ruby gem in Rails
Don't know if this is a good thing, but it works like a charm...
The downside is that you have to restart the server every single time you make a change to the monkey-patching...
EDIT: It seems that this monkey-patch will be garbage collected after a few requests.
EDIT 2: This post helped me out How to monkey-patch code that gets auto-loaded in Rails? you need to add thin sin your Intializer to force rails to reload your patch for every request
Rails.configuration.to_prepare do
Upvotes: 0