It''s my first rails project and something is broken: my action controllers can''t access methods defined in the helper modules. The only thing, I successfully verified (by setting a debugger statement at the very beginning of the helper modules) is, that the helper modules get loaded before the action controller is called. None the less, the methods defined in the helpers, are unknown to the action controllers. I can fix the problem by duplicating the helper methods in the controller module, but that''s a hack. Any idea, how to find the reason? -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Jan 1, 6:38 pm, Fritz Trapper <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> It''s my first rails project and something is broken: my action > controllers can''t access methods defined in the helper modules. > > The only thing, I successfully verified (by setting a debugger statement > at the very beginning of the helper modules) is, that the helper modules > get loaded before the action controller is called. > > None the less, the methods defined in the helpers, are unknown to the > action controllers. > > I can fix the problem by duplicating the helper methods in the > controller module, but that''s a hack. > > Any idea, how to find the reason? > -- > Posted viahttp://www.ruby-forum.com/.http://api.rubyonrails.org/classes/ActionController/Helpers/ClassMethods.html#M000490 (the documentation sort-of lies, as the helper() method does not actually "include" the specified module) helper WhateverHelper will give the view access to the helper module''s instance methods include WheteverHelper will, being plain-old-Ruby, include the WhateverHelper module into the controller -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@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.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type"> <title></title> </head> <body bgcolor="#ffffff" text="#000000"> Fritz Trapper wrote: <blockquote cite="mid:083245a7d9dd3f8b9a08908e03d599ee-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org" type="cite"> <pre wrap="">It''s my first rails project and something is broken: my action controllers can''t access methods defined in the helper modules. The only thing, I successfully verified (by setting a debugger statement at the very beginning of the helper modules) is, that the helper modules get loaded before the action controller is called. None the less, the methods defined in the helpers, are unknown to the action controllers. I can fix the problem by duplicating the helper methods in the controller module, but that''s a hack. Any idea, how to find the reason? </pre> </blockquote> <font size="-1"><font face="Helvetica, Arial, sans-serif">The helpers are more accurately called view helper methods. They are not intended for use in the controllers.</font></font><br> </body> </html> <p></p> <p>--</p> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.<br /> To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org<br /> To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org<br /> For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.<br />
If you want to use the same methods in both environments (view and controller), you can do like this (in controller): def method_a end def method_b end helper_method :method_a, :method_b Then the methods will be available also in views. 2010/1/1 Norm Scherer <normscherer-ihVZJaRskl1bRRN4PJnoQQ@public.gmane.org>> Fritz Trapper wrote: > > It''s my first rails project and something is broken: my action > controllers can''t access methods defined in the helper modules. > > The only thing, I successfully verified (by setting a debugger statement > at the very beginning of the helper modules) is, that the helper modules > get loaded before the action controller is called. > > None the less, the methods defined in the helpers, are unknown to the > action controllers. > > I can fix the problem by duplicating the helper methods in the > controller module, but that''s a hack. > > Any idea, how to find the reason? > > > The helpers are more accurately called view helper methods. They are not > intended for use in the controllers. > > -- > 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org<rubyonrails-talk%2Bunsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> > . > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. >-- Bruno Grasselli Blog: http://brunograsselli.com.br Twitter: http://twitter.com/grasselli -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Thanks for your replies. Now I read the API reference of ActionController::Helpers::ClassMethods and took a look into my ApplicationController, which has been generated via RadRails: class ApplicationController < ActionController::Base helper :all # include all helpers, all the time protect_from_forgery end If I understand the doc, helper :all should do the job for all controllers. To verify this, I set a debugger call as first statement in my crashing controller and give y ActionController::Base.helpers_dir into the debugger. The response is: NoMethodError Exception: undefined method `helpers_dir'' for ActionController::Base:Class So what is going wrong there? -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Jan 2, 8:37 am, Fritz Trapper <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Thanks for your replies. > > Now I read the API reference of ActionController::Helpers::ClassMethods > and took a look into my ApplicationController, which has been generated > via RadRails: > > class ApplicationController < ActionController::Base > helper :all # include all helpers, all the time > > protect_from_forgery > end > > If I understand the doc, helper :all should do the job for all > controllers. > > To verify this, I set a debugger call as first statement in my crashing > controller and give > > y ActionController::Base.helpers_dir > > into the debugger. The response is: > > NoMethodError Exception: undefined method `helpers_dir'' for > ActionController::Base:Class > > So what is going wrong there? > -- > Posted viahttp://www.ruby-forum.com/.As I said: ActionController::Base.helper does not actually include helper modules into the controller; it makes them accessible in the view. You''ll need to include ApplicationHelper # or whatever appropriate module to have the methods accessible in the controller. -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@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.
pharrington wrote:> As I said: ActionController::Base.helper does not actually include > helper modules into the controller; it makes them accessible in the > view. You''ll need to > > include ApplicationHelper # or whatever appropriate module > > to have the methods accessible in the controller.In deed, that helps. Sorry for my ignorance. -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
But there is still one annoying point: My controllers worked using methods from ApplicationHelper until yesterday morning, when I tried to modify routes.rb and run sume rake jobs from RadRails that I didn''t really understand, including rake rails:update The changes in routes.rb have been rolled back, but that didn''t help -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Jan 2, 10:15 am, Fritz Trapper <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> rake rails:updateThen perhaps helper() actually included the helper modules into the controller in an earlier version of Rails. Its hard for me to remember at this point, but I know since at least 2.2 helper()''s behaved as it does now. Just curious now; what version of Rails did you have previously installed, and what version did you upgrade to before running rake rails:update? -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@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.
pharrington wrote:> Just curious now; what version of Rails did you have previously > installed, and what version did you upgrade to before running rake > rails:update?I initially installed ruby and rails using synaptic on Ubuntu 9.04. It was ruby 1.8 and rails 2.1.0-6. -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
One more issue. class ZaehlersController < ApplicationController def index if keineZaehlerVorhanden blah end respond_to do |format| format.html # index.html.erb format.xml { render :xml => @zaehlers } end end if !keineZaehlerVorhanden verify :session => :user_name, :add_flash => {:error => "error"}, :redirect_to => {:controller => "authentication", :action => "login"} end end If it gets called, if !keineZaehlerVorhanden veriy... end fails with "NameError (undefined local variable or method `keineZaehlerVorhanden'' for ZaehlersController:Class): After removing the condition around the verify, the index action terminates successfully - including the if keineZaehlerVorhanden blah end Why this? -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
I forgot to say: keineZaehlerVorhanden is defined in ApplicationHelper, which is included in ApplicationController. -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Jan 2, 11:19 am, Fritz Trapper <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> One more issue. > > class ZaehlersController < ApplicationController > def index > if keineZaehlerVorhanden > blah > end > > respond_to do |format| > format.html # index.html.erb > format.xml { render :xml => @zaehlers } > end > endLook at this carefully. You''re closing the respond_to block, and then closing the index method. keineZaehlerVorhanden isn''t a class method, so of course the error will be thrown. the error message "fails with "NameError (undefined local variable or method `keineZaehlerVorhanden'' for **ZaehlersController:Class**)" gives a prettttttttyyy good clue as to whats going on. -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@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.
pharrington wrote:> On Jan 2, 11:19�am, Fritz Trapper <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote: >> � � � format.xml �{ render :xml => @zaehlers } >> � � end >> � end > > Look at this carefully. You''re closing the respond_to block, and then > closing the index method. keineZaehlerVorhanden isn''t a class method, > so of course the error will be thrown.keineZaehlerVorhanden is a method of ApplicationController and it works inside the index action. The verify statement is written usually at class level. Right? My idea was, only to verfy, if the method keineZaehlerVorhanden fails. The interesting story is, that the construct around the verify worked fine until I accidentally run a rake rails:update Seems, that the updated rails version changed something in the handling of controllers. My question: How to implement a verification, that should not be executed under a certain condition? (Background: The action should be executable for anybody, as long as no users are added to the data base - aka installation phase of my app.) -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@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.
On Jan 2, 12:32 pm, Fritz Trapper <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> pharrington wrote: > > On Jan 2, 11:19 am, Fritz Trapper <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote: > >> format.xml { render :xml => @zaehlers } > >> end > >> end > > > Look at this carefully. You''re closing the respond_to block, and then > > closing the index method. keineZaehlerVorhanden isn''t a class method, > > so of course the error will be thrown. > > keineZaehlerVorhanden is a method of ApplicationController and it works > inside the index action. > > The verify statement is written usually at class level. Right? My idea > was, only to verfy, if the method keineZaehlerVorhanden fails. > > The interesting story is, that the construct around the verify worked > fine until I accidentally run a rake rails:update > > Seems, that the updated rails version changed something in the handling > of controllers. > > My question: How to implement a verification, that should not be > executed under a certain condition? >Well now, verify only exists to prevent actions from even being *invoked* unless certain conditions of the request are met. If you need tighter control, to filter based on more than just the request, just use a before_filter. Either way, you should probably focus on *precisely* what you''re trying to accomplish, and the solution will probably be obvious (and definitely simpler than doing the same check in two different places).> (Background: > The action should be executable for anybody, as long as no users are > added to the data base - aka installation phase of my app.) > -- > Posted viahttp://www.ruby-forum.com/.OK yeah, this is before_filter material. Don''t know if the lack of users in the DB appropriately denotes the "installation phase," but thats for you to think about. -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@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.
Thanks, now it works as expected. -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.