I''m making some ajax calls via prototype''s new Ajax.Request
method.
When I do that, are before_filters fired? This is Rails 1.2.3, and  
here is what I''m doing:
in a controller, I have
before_fllter :get_poll
which assigns global variables by querying the database for the  
current poll (if there is one) and checking to see if the current  
user has voted in it yet (must be logged in to vote).
in a view, I have
<div id="current_poll">
<%= render :partial => ''polls/poll'' %>
</div>
Using the globals defined in the get_poll before filter, there is  
logic In the _polls partial to display the voting form if the user  
hasn''t voted yet or the current results if the user has.
The Vote button on the poll form calls a javascript function that  
ultimately does this
	new Ajax.Request(''/wgg/vote'', {
		method: ''post'',
		parameters: $(''poll_form'').serialize(),
		onFailure: function() { alert(''Unable to cast your vote.'');
},
		onException: function(o, e) { alert(e); }
	});
and the controller action ''vote'' ends with
render :update do |page|
	page.replace_html ''current_poll'', :partial =>
''polls/poll''
end
When I vote, the vote is recorded in the database, but the vote form  
is rendered again, not the results.  If I explicitly call get_poll  
before the render :update, like this
get_poll
render :update do |page|
	page.replace_html ''current_poll'', :partial =>
''polls/poll''
end
it works correctly.  It seems like the before filter get_poll is not  
getting called for the xhr request.  Is that the case?
Hmm.  Now that I think about it, before filters are getting called.  
They have to be.  The very first before_filter checks to see if  
someone is logged in, and since the vote gets recorded against my  
login, it seems that the before filter was executed properly.  Here  
is the list of before filters in this controller
	before_filter :get_person
	before_filter :require_no_login, :only =>  
[:sign_up, :login, :forgot_password]
	before_filter :set_includes, :except =>  
[:directory, :submit_task, :request_group, :vote]
	before_filter :require_login, :only =>  
[:vote, :submit_task, :request_group, :directory, :directory_message]
	before_filter :get_poll
	before_filter :set_flash_variables
You can see that require_no_login and set_includes won''t get called  
when voting, so only get_person and require_login could stop get_poll  
from being called.  But since the vote does actually get recorded,  
the vote action is invoked, so no before_filter ended the chain.  
Besides, there''s nothing in the log about the filter chain ending.
I''m confused. Enlightenment appreciated.
Peace,
Phillip
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---