Welcome to MSE!
Remember that computations in homotopy (read: derived) categories are hard, whereas computation in a model category are (comparatively) easy. So we should try to work in the model structure for as long as possible.
Now, there's a nice model structure on $\text{Ch}(R\text{-mod})$ (by which I mean cochains of $R$-modules supported in nonnegative degrees) based on injectives. There's a dual construction for nonnegatively supported chains of $R$-modules based on projectives, and it's a good exercise to work through what hapepns in that case. See here for more information.
For us, the model structure is given by the following data:
- weak equivalences are quasi-isomorphisms
- cofibrations are levelwise monos
- fibrations are levelwise epis so that each kernel is injective
Now, by abstract model-categorical nonsense, we have the following facts:
- Every object is weakly equivalent to an object that is both fibrant and cofibrant. In the derived category, this becomes an isomorphism
- If $A$ is cofibrant and $B$ is fibrant, then an arrow $A \to B$ in the derived category is an equivalence class of arrows $A \to B$ (where we identify chain homotopic arrows).
Concretely, we can see that every object is cofibrant with this model structure, and we see the fibrant objects are the chain complexes which are injective in each dimension (in both cases, do you see why?).
Then in $\mathcal{D}(\text{Ch}(R\text{-mod}))$, we see that $M[0] \cong I$, where $I$ is an injective resolution for $M$. In fancier language, $I$ is the fibrant replacement of $M[0]$.
This tells us that derived arrows $X \to M[0]$ are the same thing as derived arrows $X \to I$. But since $I$ is fibrant and $X$ is cofibrant, (2) above tells us that derived arrows $X \to I$ are exactly chain-homotopy-classes of arrows $X \to I$ in $\text{Ch}(R\text{-mod})$!
So at the end of the day, we see that a derived map $X \to M[0]$ is nothing more than a chain-homotopy-class of maps from $X \to I$, where $I$ is an injective resolution of $M$. Of course, this is a fairly concrete object that we can actually compute with when necessary!
But what about derived maps $M[0] \to X$?
This requires us to commpute a fibrant replacement for $X$. That is, we must find a cochain $I$ of injectives so that $H^n(X) \cong H^n(I)$ for every $n$. It turns out that, if we're careful, we can build this inductively in much the same way that we can build an injective resolution for $M$. In the abstract, we can just appeal to the fact that a fibrant replacement always exists. But if we actually need to get our hands dirty and compute something, it's nice to know that we can (even if it's a bit annoying).
Regardless, once we have our hands on such a complex $I$, we know that derived maps
$M[0] \to X$ are the same thing as derived maps $M[0] \to I$, since $X$ and $I$ are isomorphic in the derived category. But since $M[0]$ is cofibrant and $I$ is fibrant, we know by (2) again that maps $M[0] \to I$ are chain-homotopy-classes of maps from $M[0] \to I$ in $\text{Ch}(R\text{-mod})$.
I hope this helps ^_^