Buddhi De silva
2008-Apr-24 08:47 UTC
Calling Controller methods from application controllers
Is there a way/workaround to call a controller method from application controller? #Controller SomeController < ApplicationController def some_method ... end end #Application Controller ApplicationController < ActionController::Base def another_method # # Call the SomeController.some_method from here # end end -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Frederick Cheung
2008-Apr-24 09:55 UTC
Re: Calling Controller methods from application controllers
On 24 Apr 2008, at 09:47, Buddhi De silva wrote:> > Is there a way/workaround to call a controller method from application > controller? >If you''re asking that question, chances are you''re doing something wrong That said if you have ApplicationController < ActionController::Base def another_method some_method end end then you it will work as long as your controller has a method called some_method Fred> #Controller > SomeController < ApplicationController > > def some_method > ... > end > > end > > #Application Controller > ApplicationController < ActionController::Base > > def another_method > # > # Call the SomeController.some_method from here > # > end > > end > -- > Posted via http://www.ruby-forum.com/. > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Buddhi De silva
2008-Apr-24 10:03 UTC
Re: Calling Controller methods from application controllers
Frederick Cheung wrote:>> Is there a way/workaround to call a controller method from application >> controller? >> > If you''re asking that question, chances are you''re doing something wrong > > That said if you have > > ApplicationController < ActionController::Base > def another_method > some_method > end > end > > then you it will work as long as your controller has a method called > some_method > > FredThanks for the quick reply Fred. But my issue is that some_method is in SomeController, not in application controller. And i need to call specific functions in specific controllers. like SomeOneController.new, SomeTwoController.new, SomeOneController.some_method,... -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Frederick Cheung
2008-Apr-24 10:16 UTC
Re: Calling Controller methods from application controllers
On 24 Apr 2008, at 11:03, Buddhi De silva wrote:> > Frederick Cheung wrote: > >>> Is there a way/workaround to call a controller method from >>> application >>> controller? >>> >> If you''re asking that question, chances are you''re doing something >> wrong >> >> That said if you have >> >> ApplicationController < ActionController::Base >> def another_method >> some_method >> end >> end >> >> then you it will work as long as your controller has a method called >> some_method >> >> Fred > > > Thanks for the quick reply Fred. But my issue is that some_method is > in > SomeController, not in application controller. And i need to call > specific functions in specific controllers. like > SomeOneController.new, > SomeTwoController.new, SomeOneController.some_method,...Then you''re handling this the wrong way. The common code should be in a module included in all the relevant controllers or pushed down into the model. Fred> > -- > Posted via http://www.ruby-forum.com/. > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Buddhi De silva
2008-Apr-24 10:31 UTC
Re: Calling Controller methods from application controllers
Frederick Cheung wrote:> On 24 Apr 2008, at 11:03, Buddhi De silva wrote: > >>> That said if you have >>> Fred >> >> >> Thanks for the quick reply Fred. But my issue is that some_method is >> in >> SomeController, not in application controller. And i need to call >> specific functions in specific controllers. like >> SomeOneController.new, >> SomeTwoController.new, SomeOneController.some_method,... > > Then you''re handling this the wrong way. The common code should be in > a module included in all the relevant controllers or pushed down into > the model. > > FredCommon code is the code used for calling the some_method, its in the ApplicationController. What i need is to call specific methods in specific controllers. This is the scenario to explain. 1. User logs in (there are ajax based dashboard widgets that can be updated by user) 2. If user clicks on a widget after the session timed out, the ajax based login window will pop up (similar to light box) for user verification. There is a before_filter for checking timeout and it render the login window. 3. After verifying the user, login window will be closed 4. Ajax dashboard widget will be updated However this 4th step is not happening if ajax login window is shown and user is verified. My idea is to capture and save the original request, because the filter chain get halted at the point of before_filter render the login window (4th step is not happening as the login window closes). My plan is to save the request info and then call the specific method in specific controller based on that saved original request info. There would be many widgets that use the ajax login window.. so I need to keep this DRY.. Any suggestion/help welcome..! -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
David A. Black
2008-Apr-24 10:33 UTC
Re: Calling Controller methods from application controllers
Hi -- On Thu, 24 Apr 2008, Buddhi De silva wrote:> > Frederick Cheung wrote: > >>> Is there a way/workaround to call a controller method from application >>> controller? >>> >> If you''re asking that question, chances are you''re doing something wrong >> >> That said if you have >> >> ApplicationController < ActionController::Base >> def another_method >> some_method >> end >> end >> >> then you it will work as long as your controller has a method called >> some_method >> >> Fred > > > Thanks for the quick reply Fred. But my issue is that some_method is in > SomeController, not in application controller. And i need to call > specific functions in specific controllers. like SomeOneController.new, > SomeTwoController.new, SomeOneController.some_method,...See Fred''s answer, to which I''ll add: I think there''s some confusion about how method-calling works. If you really mean SOC.some_method, then you''re talking about a class method: class SomeOneController def self.some_method # etc. rather than an instance method. If you define an instance method called some_method in SomeOneController, then it''s not a matter of calling it from other controllers; it''s a matter of whether or not you have an object in scope that can execute that method. (Actually that''s always the question. With class methods, the necessary object happens to be a class object.) David -- Rails training from David A. Black and Ruby Power and Light: INTRO TO RAILS June 9-12 Berlin ADVANCING WITH RAILS June 16-19 Berlin INTRO TO RAILS June 24-27 London (Skills Matter) See http://www.rubypal.com for details and updates! --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Buddhi De silva
2008-Apr-24 10:50 UTC
Re: Calling Controller methods from application controllers
David A. Black wrote:> Hi -- > See Fred''s answer, to which I''ll add: I think there''s some confusion > about how method-calling works. If you really mean SOC.some_method, > then you''re talking about a class method: > > class SomeOneController > def self.some_method > # etc. > > rather than an instance method. If you define an instance method > called some_method in SomeOneController, then it''s not a matter of > calling it from other controllers; it''s a matter of whether or not you > have an object in scope that can execute that method. (Actually that''s > always the question. With class methods, the necessary object happens > to be a class object.) > > > David > > --David, I''m a noob to ruby, sorry if i''m not asking the correct question. The method is not a class method. The method would be a normal method we find in any controller new, index, create.. etc. is it possible for me to access that method from ApplicationController. I just posted SomeController.some_method they way i saw it. I just need to find a workaround similar to that. My 3rd post explains what i need to use this functionality for.. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Buddhi De silva
2008-Apr-24 14:09 UTC
Re: Calling Controller methods from application controllers
Brian Dainton wrote:> 2 things for you. > > 1.) The guys above give good advice. However, to solve your exact > problem, just add a blank definition of some_method in > ApplicationController, like so: > > ApplicationController < ActionController::Base > > def some_method > end > > # you already had this another_method in here, so I''m leaving it in > def another_method > some_method > end > end > > When you call some_method from another_method, it will find your > inherited some_method implementation in SomeController and use it. > > 2.) When communicating class methods versus instance methods, in Ruby, > you want to indicate a class method like so: > > ClassName.some_class_method > > and an instance method like this: > > ClassName#some_instance_method > > Just FYI. > > Best, > - BD > http://www.buddingrubyist.com > http://www.fiveruns.com > > On Apr 24, 5:50�am, Buddhi De silva <rails-mailing-l...@andreas-s.net>Thanka Brian, highly appreciate your advice... I think latter one could do what i need to do.. Fred and David thanks heaps for your advice as well.. Hope this will work.. i''ll keep posted on progress - buddhi -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Buddhi De silva
2008-Apr-24 15:54 UTC
Re: Calling Controller methods from application controllers
Brian Dainton wrote:> 2.) When communicating class methods versus instance methods, in Ruby, > you want to indicate a class method like so: > > ClassName.some_class_method > > and an instance method like this: > > ClassName#some_instance_method > > Just FYI. > > Best, > - BD > http://www.buddingrubyist.com > http://www.fiveruns.com > > On Apr 24, 5:50�am, Buddhi De silva <rails-mailing-l...@andreas-s.net>Hi Brian, the "#" in ClassName#some_instance_method is treated as a comment Any ideas? -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Nathan Esquenazi
2008-Apr-24 16:01 UTC
Re: Calling Controller methods from application controllers
You can''t actually write: ClassName#some_instance_method in your code. If you want to use an instance method, you need to call it on an instance of the class, not the class itself. Consider a simple example. class SomeClass def self.some_class_method end def some_instance_method end end If I want to call the class method then I would type: SomeClass.some_class_method but to use an *instance* method, you need to call the method on an instance of the class. For example you might do s = SomeClass.new s.some_instance_method I realize this doesn''t translate very well to controllers although I have to be honest the requirement tells me that you are going about it the wrong way. You should *never* have to invoke methods from multiple other controllers actions from within the application controller at once. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
felipekk-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
2008-Apr-24 17:26 UTC
Re: Calling Controller methods from application controllers
I think the easier way is going to be a simple redirection after step 3 is completed. Save the params hash on the session and redirect the user to the Controller#action he requested when the session was timed out. Then you could setup another before_filter that looks for a params hash on the session, and if found, loads that data onto the current params hash. This will incur a regular request instead of Ajax, but I think it is the best way to do it. On Apr 24, 9:01 am, Nathan Esquenazi <rails-mailing-l...@andreas- s.net> wrote:> You can''t actually write: > > ClassName#some_instance_method > > in your code. If you want to use an instance method, you need to call it > on an instance of the class, not the class itself. Consider a simple > example. > > class SomeClass > def self.some_class_method > > end > > def some_instance_method > > end > end > > If I want to call the class method then I would type: > > SomeClass.some_class_method > > but to use an *instance* method, you need to call the method on an > instance of the class. > > For example you might do > > s = SomeClass.new > s.some_instance_method > > I realize this doesn''t translate very well to controllers although I > have to be honest the requirement tells me that you are going about it > the wrong way. You should *never* have to invoke methods from multiple > other controllers actions from within the application controller at > once. > -- > Posted viahttp://www.ruby-forum.com/.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Brian Dainton
2008-Apr-24 19:11 UTC
Re: Calling Controller methods from application controllers
Buddhi, The ''#'' is for when you are trying *communicate* an instance method. Not when coding it. You''ll see it all the time in Ruby documentation. Again, to answer your original question, if you still have your code in the same state as when you created this post, just add a blank some_method instance method to your ApplicationController. def some_method end That''s it. - BD http://www.buddingrubyist.com http://www.fiveruns.com On Apr 24, 10:54 am, Buddhi De silva <rails-mailing-l...@andreas- s.net> wrote:> Brian Dainton wrote: > > 2.) When communicating class methods versus instance methods, in Ruby, > > you want to indicate a class method like so: > > > ClassName.some_class_method > > > and an instance method like this: > > > ClassName#some_instance_method > > > Just FYI. > > > Best, > > - BD > >http://www.buddingrubyist.com > >http://www.fiveruns.com > > > On Apr 24, 5:50�am, Buddhi De silva <rails-mailing-l...@andreas-s.net> > > Hi Brian, > > the "#" in ClassName#some_instance_method is treated as a comment > > Any ideas? > -- > Posted viahttp://www.ruby-forum.com/.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Buddhi De silva
2008-Apr-25 18:45 UTC
Re: Calling Controller methods from application controllers
I''m still stuck with the same issue and it seems I''ve to accept what rails/ruby has set as rules/limitations.. hoping those are there for our own good.. :) Q1. However I have another question if all can kindly share the way they would solve the issue.. Scenario: 1. User logs in (there are ajax based dashboard widgets that can be updated by user) 2. If user clicks on a widget after the session timed out, the ajax based login window will pop up (similar to light box) for user verification. There is a before_filter for checking timeout and it render the login window. 3. After verifying the user, login window will be closed 4. Ajax dashboard widget will be updated However this 4th step is not happening if ajax login window is shown and user is verified.. because the filter chain get halted at the point of before_filter render the login window (4th step is not happening as the login window closes) -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---