Ruby se vs final da linha se comportar de forma diferente?

Por que esse código não funciona?

b if b = true

Erro:undefined local variable or method `b'

Mas isso faz:

if b = true
    b
end

Eles não deveriam ser os mesmos?