Share controller method when rendering partial

Hi, I have a question regarding rendering partials:

I have this controller called twitter

class TwitterController < ApplicationController

  def index     @twitter_search = Twitter::Search.new('#rails')   end end

In the twitter index views i render a partial:

<%= render :partial => "shared/twitterlist" %>

This work's fine for the Twitter index view, but when I call the render partial from another view like dashboard/index like this:

<%= render :partial => "shared/twitterlist" %>

I get this error:

You have a nil object when you didn't expect it! You might have expected an instance of Array. The error occurred while evaluating nil.each

What am I doing wrong here? Is it even possible to share data across the views like that?

Robert Walker wrote:

Keep in mind that instance variables set in controllers are only available for one request/response cycle. Any data you need for a view you should assign in the controller action used to render the view.

Also remember that before_filter can be used in cases where you need to load data for multiple actions within a controller. This will help keep your code DRY.

Thanks Robert, But one question. Where do I put the code called by an :before_filter In the application_controller ?

If I’m not mistaken, you have TwitterController and a DashboardController. You could have a before_filter (to set @twitter_search) in each of these for the methods that result in the partial being rendered. I suppose you could also have a before_filter in the ApplicationController, but not sure that’s the best idea.

Euwyn

But where shhould the method live? In the Application controller?

def twitter_search    ... end