How to manage different views
For the part you do not like, you can set a before_filter in ApplicationController. Therefore a redirect will not be necessary. Selection form can resubmit to the current page with "view_type" parameter.

#application_controller.rb
before_filter :check_view_type, :only =&gt; [:index]

def check_view_type
   session[:view_type] = params[:view_type] if params[:view_type].present?
end


For this specific example I would prefer layout and partial views. It is well described in Rails guides.

#x/index.html.erb
render :partial =&gt; 'item', :layout =&gt; current_layout, :collection =&gt; @items

#application_controller.rb
helper_method :current_layout

def supported_layouts
    [nil]
end 

def current_layout 
 supported_layouts.include? session[:view_type] ? session[:view_type] : supported_layouts.first
end

#x_controller.rb
def supported_layouts 
    %w[box list]
end 

def index
  # only index logic 
end