Hello,
My Question:
------------
How can one have the equivalent of "before_filter" checking (e.g. to
require a user to be logged in before carrying out an action) on a
method when the method is called implicitly inside another action (the
before_filter doesn't seem to get run)?
Background:
------------
So in this instance I have a restful controller that allows users to
enter a new "entry", but after they click the next button instead of
automatically creating the new entry, I would like to provide an
additional "confirmation" stage where they can confirm their entry
details, and their entries can be validated as well. _After_ they have
confirmed and the entries validated, then I would like to call the
create action where it is then created.
My understanding is that you can't redirect a post request to another
handler (without writing a separate ruby method to create a HTTP
request that resends the POST parameters etc..) and so what I have
read somewhere else is to do if/then/else checking with params of the
submit button's name instead.
Unfortunately doing it this way (refer to code below), the
before_filter which requires a user to be logged in, doesn't get run.
What I would like to do is place no restrictions up to the
confirmation stage, and only require a logged in user for the create
action.
Is there a right way to do this or is this just a really un-rails way
of doing this - in which case how should it be done normally?
Thanks for your help!
Sample Code (Rails v2.3.4):
---------------------------
class EntryController < ApplicationController
before_filter :require_user, :only => [:create]
# ==new
# new_entry_url (GET /entries/new)
def new
# Display user a form page where they can fill
# in details of a new entry, which will then
# submit a post request to "confirm"
end
# ==confirm
# confirm_new_entry_url (POST /entries/new/confirm)
def confirm
# Check params for button type so we can still handle it
# as a "post" request without redirection
if params["next"]
# Validate entry and present user with a confirmation page
# so they can check their entries are correct _before_
# entry is created.
elsif params["create"]
# Called from the confirmation page where there will
# be a button with name "create"
create
render :action => :create
return
elsif params["back"]
# Called from the confirmation page where there will
# be a button with name "back" to correct user's entries
new
render :action => :new
return
end
# ==create
# entries_url (POST /entries)
def create
# This action should only be run if the user is logged in!
# But because of the re-rendering from confirm action,
# the before_filter that checks whether user is logged in or
# not does not seem to get run.
#
# @entry.save etc...
end
end
Thanks,
Chris
--
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.