Чем отличаются данные конструкции?
Отличия есть. В первом случае код внутри класса будет видеть константы из модуля (и имена вложенных классов соответственно), а втором - нет.
Пример:module A1
  TEST = 'zz'
end

module A1
  class B1
    def foo
      TEST
    end
  end
end

module A2
  TEST = 'zz'
end

class A2::B2
  def foo
    TEST
  end
endA1::B1.new.foo #> "zz"
A2::B2.new.foo #> NameError: uninitialized constant A2::B2::TEST
первая ссылка гугла по запросу "rails модули": rubyclub.blogspot.ru/2012/10/ruby_869.html