Scope of Instance Variables with Partial Views


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 =&gt; :index


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.


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?

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)