I''ve spent some time converting my website from php to RoR, and so far, I''m loving every bit of Rails. However, I''ve stumbled across a problem. On my old page, I''ve had a random quote display at a specific location, and I''d like to replicate this with RoR. Basically, I thought I would be able to add all quotes into a specific table in the database, and somehow have a global variable stored in /app/controllers/application.rb, since I want it to be accessed from all different controllers. So far, I''ve managed to get this to work: $quote = ""An witty saying proves nothing"- Voltaire" in application.rb and <%= $quote %> in my layout file, which I gather is a step on the way. From here on, however, I''ve had no luck. I''ve tried setting the variable to many different things, but it doesn''t seem to want to take anything but pure text (as displayed above). I''ve tried searching for this in the docs and the wiki, but documentation on (any kind of) variables is amazingly noticable in its absence. Basically, I would be very happy if someone could point me in the right direction to get the variable to somehow draw information out of the database. If given that much information, I''m sure I could find a way to randomise the quotes myself, but if someone wants to tell me how to do that as well, I''d be even happier. ;) Thanks in advance, Sebastian -- Posted via http://www.ruby-forum.com/.
Sebastian- I''ll take a shot at it for you. You really don''t want to use $global vars in rails. Since it will run in different fcgi processes you won''t be sure to get the same process on subsequent requests. So you are better off making a before filter in your application.rb file. Something like this: class ApplicationController < ... before_filter :get_quote attr_reader :quote protected def get_quote @quote = Quote.find(:first, :order => ''RAND'') end end Then @quote should be available to all your views and controllers and will be a different random quote on each request. I am not entirely certain that the :order => ''RAND" part is exactly the right syntax or not so you should play with that part. But that''s the easiest way to get what you want. Cheers- -Ezra On Jan 28, 2006, at 10:14 AM, Sebastian Conrad wrote:> I''ve spent some time converting my website from php to RoR, and so > far, > I''m loving every bit of Rails. However, I''ve stumbled across a > problem. > > On my old page, I''ve had a random quote display at a specific > location, > and I''d like to replicate this with RoR. Basically, I thought I > would be > able to add all quotes into a specific table in the database, and > somehow have a global variable stored in > /app/controllers/application.rb, since I want it to be accessed > from all > different controllers. So far, I''ve managed to get this to work: > > $quote = ""An witty saying proves nothing"- Voltaire" > > in application.rb and > > <%= $quote %> > > in my layout file, which I gather is a step on the way. From here on, > however, I''ve had no luck. I''ve tried setting the variable to many > different things, but it doesn''t seem to want to take anything but > pure > text (as displayed above). I''ve tried searching for this in the > docs and > the wiki, but documentation on (any kind of) variables is amazingly > noticable in its absence. > > Basically, I would be very happy if someone could point me in the > right > direction to get the variable to somehow draw information out of the > database. If given that much information, I''m sure I could find a > way to > randomise the quotes myself, but if someone wants to tell me how to do > that as well, I''d be even happier. ;) > > Thanks in advance, > > Sebastian > > -- > > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >-Ezra Zygmuntowicz WebMaster Yakima Herald-Republic Newspaper ezra@yakima-herald.com 509-577-7732
Thanks, it worked! The correct syntax would be: @quote = Quote.find(:first, :order => "RAND()", :limit => 1) Also, just to be a pain, I was wondering if you (or someone else) could explain what the following lines are, and why they''re there. I really want to be able to understand what it is I''m doing, so that I''ll be able to solve issues myself next time. ;)> attr_reader :quoteand> protected-- Posted via http://www.ruby-forum.com/.
Sebastian Conrad wrote:> Thanks, it worked! The correct syntax would be: > > @quote = Quote.find(:first, :order => "RAND()", :limit => 1) > > Also, just to be a pain, I was wondering if you (or someone else) could > explain what the following lines are, and why they''re there. I really > want to be able to understand what it is I''m doing, so that I''ll be able > to solve issues myself next time. ;) > >> attr_reader :quote > and >> protectedattr_reader :quote [1] creates a method that returns @quote. protected [2] means that the method generated by attr_reader is only accessible from within ApplicationController and any subclasses of ApplicationController. 1. http://www.ruby-doc.org/core/classes/Module.html#M000762 2. http://www.rubycentral.com/book/tut_classes.html#S4 Phil -- Philip Ross http://tzinfo.rubyforge.org/ -- DST-aware timezone library for Ruby