Thanks for the quick response.

As I've said, even if I change the loading order it still won't work. 

I'll try class_eval but still I don't understand why the monkey patching does 
not work. Is it a feature of the engine that it has an all or nothing 
overriding of classes?
 
On Sep 28, 2012, at 12:27 PM, Godfrey Chan wrote:

> Also, you might want to use class_eval for monkey patching. This way it 
> errors out if the original implementation has not been loaded yet, so you'll 
> know something has gone wrong. See here - 
> http://practicalruby.blogspot.com/2007/02/reopen-with-moduleeval.html
> 
> Godfrey
> 
> On 2012-09-28, at 4:20 AM, Godfrey Chan wrote:
> 
>> If you are using Rails 3.2, you can tell Rails to load your engine before it 
>> loads your app like so:
>> 
>> config.railties_order = [ Your::Engine, :main_app, :all ]
>> 
>> Then your monkey patching should work.
>> 
>> If you are on older versions of Rails you can monkey patch AS::Dependencies 
>> like http://www.slideshare.net/AndyMaleh/rails-engine-patterns (Slide 17). 
>> You probably want to watch the whole talk by Andy Maleh here.
>> 
>> Godfrey
>> 
>> On 2012-09-28, at 4:14 AM, Luís Ferreira wrote:
>> 
>>> Hum... Haven't thought of that. Thanks.
>>> 
>>> Still, this is not the expected behaviour for a ruby class right? Or am I 
>>> completly wrong here?
>>> On Sep 28, 2012, at 12:02 PM, Robert Pankowecki wrote:
>>> 
>>>> Probably because of the way how Rails is looking for constants ? I would 
>>>> guess that it does not read the file from engine at all, and just reads 
>>>> the file from your app.
>>>> 
>>>> Robert Pankowecki
>>>> http://robert.pankowecki.pl
>>>> 
>>>> On Fri, Sep 28, 2012 at 12:59 PM, Luís Ferreira <[email protected]> 
>>>> wrote:
>>>> Hey guys,
>>>> 
>>>> I've been working on engines lately and I can't understand why a class in 
>>>> an engine can't be monkey patched. Here's an example:
>>>> 
>>>> In the engine:
>>>> 
>>>> class MyEngine::MyController < ApplicationController
>>>>   def index
>>>>     @stuff = 1
>>>>   end
>>>> 
>>>>   def show
>>>>     ... something happens ...
>>>>   end
>>>> end
>>>> 
>>>> In the app including the engine:
>>>> 
>>>> class MyEngine::MyController < ApplicationController
>>>>   def index
>>>>     @stuff = 2
>>>>   end
>>>> end
>>>> 
>>>> In this example I would expect for only the index method to be overriden, 
>>>> but it seems the entire class is overriden. Is there any reason for this 
>>>> behaviour? Is this a feature or a bug?
>>>> 
>>>> 
>>>> Regards,
>>>> Luís Ferreira
>>>> 
>>>> 
>>>> 
>>>> --
>>>> You received this message because you are subscribed to the Google Groups 
>>>> "Ruby on Rails: Core" group.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to 
>>>> [email protected].
>>>> For more options, visit this group at 
>>>> http://groups.google.com/group/rubyonrails-core?hl=en.
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> You received this message because you are subscribed to the Google Groups 
>>>> "Ruby on Rails: Core" group.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to 
>>>> [email protected].
>>>> For more options, visit this group at 
>>>> http://groups.google.com/group/rubyonrails-core?hl=en.
>>> 
>>> Cumprimentos,
>>> Luís Ferreira
>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "Ruby on Rails: Core" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to 
>>> [email protected].
>>> For more options, visit this group at 
>>> http://groups.google.com/group/rubyonrails-core?hl=en.
>> 
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Core" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/rubyonrails-core?hl=en.

Cumprimentos,
Luís Ferreira



-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en.

Reply via email to