Hands down, immersion is the most efficient way to learn any language fluently. However, immersion programs can be expensive and difficult, so they’re not for everyone.
I took 6 years of Spanish classes in school and have been studying Japanese in a variety of ways. The traditional classroom method was effective for me because I really wanted to learn the language (plus I had an awesome teacher), but others who were less motivated somehow managed to make it to the highest level class without knowing even basic Spanish grammar. Often people reject this traditional classroom setting because it takes a long time to learn and isn’t effective for everybody.
I’m not so sure about those “learn Spanish fast!” programs out there, like Rosetta Stone. I have used Rosetta Stone for Japanese and have done demos of other languages like Chinese. Since I already know some Japanese, the program was pretty helpful. But when I tried Chinese, I found it much less helpful. You learn some basic words and phrases quickly, but you never get the deep understanding of the language that is so imperative to becoming truly fluent.
If you really want to learn Spanish and you can’t afford to spend a large amount of time in a Spanish-speaking country, your best bet is to immerse yourself in other ways. Try watching TV in Spanish, listen to Spanish music, and read simple Spanish words. At the beginning you will be relying your handy Spanish dictionaries and grammar books to make it through a short story, but you’ll get the hang of it eventually. Don’t forget to practice speaking as often as you can! That’s the point in learning a language, isn’t it?