Trouble with quaternion when instantiating

I have a prefab rigidbody arrow which I instantiate and add force. I give it the transform.rotation of the placeholder gameobject, and then SetActive(false) the placeholder. Both have the same coordinate system. The force is applied transform.forward. When I instantiate and shoot, it goes in a diagonal direction.

So, then I tried quaternion.identity, and when I instantiate and shoot, it goes the right direction, but it is rotated 90 degrees about the x axis. So, then I try Quaternion.Euler(-90f,0f,0f)). This time, it’s oriented correctly, but it flies diagonally again… What am I misunderstanding here? From the other threads I’ve checked, it seems that the latter approach I mentioned was correct. I would think the first would be too though.

Edit:
I solved the problem by zeroing out the parent’s default rotation and with the following modification to the code below, if anyone is curious:

arrow_lock = count_them.rendered_arrow.transform.rotation * Quaternion.Euler(0f, 90f, 0f);

What this does is it takes the rotation of the placeholder arrow and adds an additional rotation before instantiating the object, since quaternions have to be multiplied in order to add an additional Euler rotation. Now, why I had to do this, I’m not sure. Since it was pointed the right way originally, it seems to me that the force vector should have given a forward force.

Here is the code, if it helps

    private void shoot_arrow()
    {
        if (player_script.bow_fire == true && count_them.out_of_arrows == false)
        {
            player_script.bow_fire = false;
            arrow_lock = Quaternion.Euler(-90f,0f,0f); // oriented correctly, but flight path at diagonal
            // alternatively, I've tried 
            // arrow_lock = Quaternion.Identity, where flight path straight, but rotation off by 90 degrees
            // arrow_lock = count_them.rendered_arrow.transform.rotation, where oriented correctly, but flight path at diagonal
            arrow_fix = count_them.rendered_arrow.transform.position;
            clone[count_them.arrow_index] = Instantiate(cloned, arrow_fix, arrow_lock) as Rigidbody;
            clone[count_them.arrow_index].transform.parent = null;
            Vector3 flight_direction = clone[count_them.arrow_index].transform.forward.normalized; 
            clone[count_them.arrow_index].AddForce(1.4f * flight_direction, ForceMode.Impulse);
            count_them.rendered_arrow.SetActive(false);
            count_them.arrow_index = count_them.arrow_index - 1;

        }
    }