Rails Gem with model-relationships for Rails Engines

ぐ巨炮叔叔 提交于 2019-12-08 04:23:35

问题


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


回答1:


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



回答2:


The activesupport-decorators gem can load your decorators for you when the original class is loaded.



来源:https://stackoverflow.com/questions/18451915/rails-gem-with-model-relationships-for-rails-engines

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!