[As ckuhn203 pointed out](http://codereview.stackexchange.com/a/56929/14370), the variable names aren't great. In this case, I'd consider just calling them `fizz` and `buzz`.

Otherwise it's OK. There are so many different ways to do this. The `case` statement is a good choice for the usage here, but you could also do:

    (1..100).each do |i|
      fizz = i % 3 == 0
      buzz = i % 5 == 0
      print "Fizz" if fizz
      print "Buzz" if buzz
      print i if !fizz && !buzz
      print "\n"
    end

Or use string concatenation

    (1..100).each do |number|
      line = ""
      line << "Fizz" if number % 3 == 0
      line << "Buzz" if number % 5 == 0
      puts line.empty? ? number : line
    end

Or, if you want a more flexible approach, you could do something like

    denominators = { "Fizz" => 3, "Buzz" => 5 } # or more

    (1..100).each do |number|
      matches = denominators.map { |name, divisor| name if number % divisor == 0 }
      puts matches.any? ? matches.join : number
    end

And of course, any of these could be wrapped as methods, as ckuhn suggested.

-----------

This is **just for fun**, because Ruby lets you monkey-patch anything. Of course **you should not** monkey-patch stuff like this "in real-life" - it's a super obnoxious "solution" I've just included for fun.

    class Fixnum
      alias_method :original_to_s, :to_s
    
      def to_s
        str = ""
        str << "Fizz" if self % 3 == 0
        str << "Buzz" if self % 5 == 0
        str.empty? ? original_to_s : str
      end
    end

    puts (1..100).to_a # to_s gets called automatically

You just can't print integers normally anymore if you do this :-P