I'm not sure what other way you're considering deleting a ship - I'm curious why you're pulling in the ship's character, but that might be related to a security-related best practice that I'll mention below.  The only other thing I can think of is what's called a "soft delete", where you add a "destroyed" property to the model and set that to "true" instead of destroying the object.  Then you set a "default scope" on the model to "where(destroyed: false)", and everything looks like it's getting deleted but you retain all the data - thereby supporting an "undelete" feature.

The security best practice is this: if we were supporting signed-in users at this juncture, we would have a concept of a "current_user", being whoever's signed in at the moment.  Since it's self-evident a player should only be able to delete their own ships, we would want to say @ship = current_user.ships.find(params[:id]).  In this way, if I tried to be sneaky and post a delete for someone else's ship, I'd get a 404 error - there are no ships in *my* stable that match this ID.  Similarly, we might want to restrict Edit/Update actions, or even Show if something is expected to be private.  But we can only do that once we're talking about Users and signing in and so forth.

If I've answered the wrong questions, let me know and I'll swing 'round for another pass.  :)