I have an index action that shows a list of data.
def index
# go get data,
# setup some instance vars
# render view - display data in table
end
URL: /orders/
I would like to have another action that sets up a few instance vars and
then calls the index action, which then takes over from there and goes
and gets data, displays the data in a table.
archive > sets up vars > runs index action code > renders index
action view
I was assuming that I could just do:
def archive
#setup instance vars
render :action => "index"
end
URL: /orders/;archive
But this just renders the index actions view, and doesn’t actually
execute the index action code.
Just wondering if it’s possible to have an action do a bit of setup,
then hand things over to another action?
Thanks,
Dave
You could call ‘index’ like a method from the other action, but then
you’ll still need to do the render in the other action. So…
def archive
#setup instance vars
index #go run the code in ‘index’
render :action => ‘index’ #render the template
end
I would like to have another action that sets up a few instance vars and
render :action => “index”
end
URL: /orders/;archive
But this just renders the index actions view, and doesn’t actually
execute the index action code.
Just wondering if it’s possible to have an action do a bit of setup,
then hand things over to another action?
If it were me, I’d separate that common functionality out into a
protected
method and have both index and archive call it directly or via a
before_filter.
This way when you realize that you need to do things a little different
b/n index and archive it’s a bit easier and clearer as to what you’re
affecting.
-philip
Jon G. wrote:
You could call ‘index’ like a method from the other action, but then
you’ll still need to do the render in the other action. So…
def archive
#setup instance vars
index #go run the code in ‘index’
render :action => ‘index’ #render the template
end
That’s what I thought would work, but I tried that and for some reason
it gives me:
Template is missing
missing template /user/admin/stuff/config/…/etc/etc/archived.rhtml
So it’s still trying to get to the archived view.
Philip H. wrote:
If it were me, I’d separate that common functionality out into a
protected
method and have both index and archive call it directly or via a
before_filter.
Good deal. I created a private “listme” action and stuck the common code
in there.
For some reason, now when I call:
def archived
#make some instance vars
listme
render :action => ‘index’
end
I don’t get the missing template error. Totally strange.
Any clue as to why I was getting the template error (see post above).
Thanks for the suggestion - learn something new every day!
Dave
Bill W. wrote:
Hi David,
David C. wrote:
def archive
missing template /user/admin/stuff/config/…/etc/etc/archived.rhtml
Is that a typo? archive vs. archived?
Bill
Yeah, typo. It’s still looking for the archive template, although I’ve
called render on the index action.
Hi David,
David C. wrote:
def archive
missing template /user/admin/stuff/config/…/etc/etc/archived.rhtml
Is that a typo? archive vs. archived?
Bill
Thanks for the suggestion - learn something new every day!
I believe when you call the the index action from archived index does an
implicit “render…” and uses the current action name for the
template…
which is archived.
I suspect if you created a blank “archived.rhtml” you’d then get a
double
rendering error.
But I could be totally wrong on both accounts as I haven’t really looked
into it