Your first two code samples do not match any flip-flop that exists and therefore won't synthesize.
The first sample responds to both edges of the clock, there is no such FF.
The second version of code responds to an edge then decides the level of that edge with a mux, that doesn't exist in the real world either, so can't be synthesized.
Finally the last one is attempting to describe a DDR FF that can only be done if the signals a and b are on an output pin of the design. If wanted an internal node with a DDR output (not recommeneded, use a 2X clock as suggested by others), then you would have to have different output signal names for a and b rising and falling outputs (e.g. a_rise, b_rise, a_fall, b_fall). Finally you use a multiplxer with the clock as the select to generate the a and b outputs.