how to get instance variables in another action in rails 3

146 views
Skip to first unread message

subbarao

unread,
Sep 19, 2011, 8:13:36 AM9/19/11
to Ruby on Rails: Talk
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

Rajarshi

unread,
Sep 19, 2011, 8:22:22 AM9/19/11
to rubyonra...@googlegroups.com
Yes Because u d onot know filter
Please read before after around filter u will get


--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonra...@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.


subbarao

unread,
Sep 19, 2011, 8:27:20 AM9/19/11
to Ruby on Rails: Talk
I know filter concept, but how we can apply that concept hear to work
with instance variables? give me one example please .

On Sep 19, 5:22 pm, Rajarshi <rdas2...@gmail.com> wrote:
> Yes Because u d onot know filter
> Please read before after around filter u will get
>
> On Mon, Sep 19, 2011 at 5:43 PM, subbarao <subbarao....@gmail.com> wrote:
> > 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

Colin Law

unread,
Sep 19, 2011, 8:44:05 AM9/19/11
to rubyonra...@googlegroups.com

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

subbarao

unread,
Sep 19, 2011, 9:06:49 AM9/19/11
to rubyonra...@googlegroups.com
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.

Colin Law

unread,
Sep 19, 2011, 10:15:46 AM9/19/11
to rubyonra...@googlegroups.com

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

Frederick Cheung

unread,
Sep 19, 2011, 11:29:51 AM9/19/11
to Ruby on Rails: Talk


On Sep 19, 3:15 pm, Colin Law <clan...@googlemail.com> wrote:
> On 19 September 2011 14:06, subbarao <subbarao....@gmail.com> wrote:
>
> > 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

Colin Law

unread,
Sep 19, 2011, 11:41:01 AM9/19/11
to rubyonra...@googlegroups.com
On 19 September 2011 16:29, Frederick Cheung <frederic...@gmail.com> wrote:
>
>
> On Sep 19, 3:15 pm, Colin Law <clan...@googlemail.com> wrote:
>> On 19 September 2011 14:06, subbarao <subbarao....@gmail.com> wrote:
>>
>> > 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

Reply all
Reply to author
Forward
0 new messages