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?
On Jan 1, 6:38 pm, Fritz T. [email protected] wrote:
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 [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-talk?hl=en.
Fritz T. 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
[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-talk?hl=en.
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 S. [email protected]
action controllers.
You received this message because you are subscribed to the Google G.
“Ruby on Rails: Talk” group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected][email protected]
.
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 [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-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?
On Jan 2, 8:37 am, Fritz T. [email protected] wrote:
end
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 [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-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.
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
On Jan 2, 10:15 am, Fritz T. [email protected] wrote:
rake rails:update
Then 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 [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-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?
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.
I forgot to say: keineZaehlerVorhanden is defined in ApplicationHelper,
which is included in ApplicationController.
On Jan 2, 11:19 am, Fritz T. [email protected] 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.
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 [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-talk?hl=en.
pharrington wrote:
On Jan 2, 11:19�am, Fritz T. [email protected] 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.)
On Jan 2, 12:32 pm, Fritz T. [email protected] wrote:
keineZaehlerVorhanden is a method of ApplicationController and it works
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 [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-talk?hl=en.
Thanks, now it works as expected.