Forum: Ruby on Rails Scope of Instance Variables with Partial Views

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Rube N. (Guest)
on 2009-03-01 22:48
Hello

I do not understand how to use instance variable properly with partial
views, I am hoping someone here can enlighten me. For example

class MainController < ApplicationController
    def index
        @item_list = Item.find_all_item
    end

    def detail_display
        @current_selected = @item= Item.find(params[:id])
        redirect_to :action => :index
    end
end

detail_display is invoked when the user clicks on an item in the list.
The variable @current_selected is not available to the partial view
invoked when the index is redirected to. How can I remedy this?

Thank you

rube_noob
Frederick C. (Guest)
on 2009-03-01 23:01
(Received via mailing list)
On Mar 1, 8:48 pm, Rube N. <removed_email_address@domain.invalid> wrote:
>     def detail_display
>         @current_selected = @item= Item.find(params[:id])
>         redirect_to :action => :index
>     end
> end
>
> detail_display is invoked when the user clicks on an item in the list.
> The variable @current_selected is not available to the partial view
> invoked when the index is redirected to. How can I remedy this?
>
The key thing you need to understand here is that this is an http
redirect, ie a separate request: by the time the index action is
rendered the controller object that had the @current_selected instance
variable has been destroyed and your request is being handled by a
completely fresh controller object. If the index action needs to know
what the currently selected object is then you need to pass a
parameter to it telling it this. In this light, I'm not sure what the
point of the detail_display action is as it seems to be a complete no-
op.

Fred
Rube N. (Guest)
on 2009-03-01 23:12
Hi Fred,

Thanks for your response,

Basically what I am trying to accomplish is have to partial views in the
index page. One for the list of items and one for the details of the
selected item. In the future I hope to add new functionality to the
index page and I hope that the index method will not have to deal with
all the different actions that I add.

I understand how this is a new HTTP request and that the
@current_selected variable is lost. Is there any way I can allow the
view to see this variable without involving the index method?

rube_noob

Frederick C. wrote:
> On Mar 1, 8:48�pm, Rube N. <removed_email_address@domain.invalid> wrote:
>> � � def detail_display
>> � � � � @current_selected = @item= Item.find(params[:id])
>> � � � � redirect_to :action => :index
>> � � end
>> end
>>
>> detail_display is invoked when the user clicks on an item in the list.
>> The variable @current_selected is not available to the partial view
>> invoked when the index is redirected to. How can I remedy this?
>>
> The key thing you need to understand here is that this is an http
> redirect, ie a separate request: by the time the index action is
> rendered the controller object that had the @current_selected instance
> variable has been destroyed and your request is being handled by a
> completely fresh controller object. If the index action needs to know
> what the currently selected object is then you need to pass a
> parameter to it telling it this. In this light, I'm not sure what the
> point of the detail_display action is as it seems to be a complete no-
> op.
>
> Fred
Frederick C. (Guest)
on 2009-03-01 23:22
(Received via mailing list)
On Mar 1, 9:12 pm, Rube N. <removed_email_address@domain.invalid> wrote:
> I understand how this is a new HTTP request and that the
> @current_selected variable is lost. Is there any way I can allow the
> view to see this variable without involving the index method?
>
Nope, you'd have to pass a parameter to the index action (although
whether manipulation of that parameter happens in the index action
itself or in a before_filter is up to you)

Fred
This topic is locked and can not be replied to.