how to get instance variables in another action in rails 3

In my controller show method i have two instance variables which have large amount of data and take much time to fetch from remote system. shown below def show     @graph = Koala::Facebook::GraphAPI.new(session[:fbuser] ["credentials"]["token"])     @friends = @graph.get_connections("me", "friends")     @friends =@friends.to_a

end

in the same controller I have another action which requires same data. shown below

def list

    @graph ||= Koala::Facebook::GraphAPI.new(session[:fbuser] ["credentials"]["token"])     @friends ||= @graph.get_connections("me", "friends")     @friends|| =@friends.to_a

  end

which are loading every time even i used || (or) in fetching. Any help regarding to re usage of instance variables of one action in another action of same controller.

Thank You

Yes Because u d onot know filter Please read before after around filter u will get

I know filter concept, but how we can apply that concept hear to work with instance variables? give me one example please .

I think the only way would be to cache the data locally in some way, either save it in a file or in the database and then retrieve it in the next action.

If you are using the data to generate the same partial display then you may be able to use the built in caching mechanism in rails. See the Rails Guide on caching. In fact it may be worth looking at that anyway.

Colin

Yes if i use catching in my application view the size limit exceeding . even I tried with passing these values throw params[:var] argument also failing Too large http request error. I also tried with Class variables to store data like @@graph and @@friends but no use those variables not at all storing data. any other way please.

In my controller show method i have two instance variables which have large amount of data and take much time to fetch from remote system. shown below def show @graph = Koala::Facebook::GraphAPI.new(session[:fbuser] ["credentials"]["token"]) @friends = @graph.get_connections("me", "friends") @friends =@friends.to_a

end

in the same controller I have another action which requires same data. shown below

def list

@graph ||= Koala::Facebook::GraphAPI.new(session[:fbuser] ["credentials"]["token"]) @friends ||= @graph.get_connections("me", "friends") @friends|| =@friends.to_a

end

which are loading every time even i used || (or) in fetching. Any help regarding to re usage of instance variables of one action in another action of same controller.

I think the only way would be to cache the data locally in some way, either save it in a file or in the database and then retrieve it in the next action.

If you are using the data to generate the same partial display then you may be able to use the built in caching mechanism in rails. See the Rails Guide on caching. In fact it may be worth looking at that anyway.

Colin

Yes if i use catching in my application view the size limit exceeding

What do you mean catching? If you mean the rails caching then there is no size limit.

. even I tried with passing these values throw params[:var] argument also failing Too large http request error. I also tried with Class variables to store data like @@graph and @@friends but no use those variables not at all storing data. any other way please.

Yes, the ways I suggested, in a file, database, possibly using the rails caching to help. Have you read the guide?

Colin

> Yes if i use catching in my application view the size limit exceeding

What do you mean catching? If you mean the rails caching then there is no size limit.

Depends on the store - for example memcache won't store anything larger than 1Mb It might be preferable to store the objects that are slow to fetch rather than the view itself, for example

@friends = Rails.cache.fetch("friends_for_#{session[:fbuser] ["credentials"]["token"]}") do   graph = Koala::Facebook::GraphAPI.new(session[:fbuser] ["credentials"]["token"])   graph.get_connections("me", "friends").to_a end

Fred

> Yes if i use catching in my application view the size limit exceeding

What do you mean catching? If you mean the rails caching then there is no size limit.

Depends on the store - for example memcache won't store anything larger than 1Mb

I stand corrected, thanks Fred. I have only used file caching. Once again it is shown that a little knowledge is a dangerous thing.

It might be preferable to store the objects that are slow to fetch rather than the view itself, for example

@friends = Rails.cache.fetch("friends_for_#{session[:fbuser] ["credentials"]["token"]}") do graph = Koala::Facebook::GraphAPI.new(session[:fbuser] ["credentials"]["token"]) graph.get_connections("me", "friends").to_a end

That looks a good way to go.

Colin