Ok, so... As my comment solved the problem, I'll post a cleaner answer. :)
First, a partial file name should always start with an underscore: "_" and not with a "-". :) This is rather a convention (and as far as I know a partial starting with a "-" isn't loaded at all...). ;)
Second, a clean solution to do what you want is to pass your block as an object to the partial, like this:
<%= render :partial => "blocks/block", :object => @blocks[0] %>
What it does is... that in your partial you will have an object with the exact same name as the partial's name. So if you named your partial "_block" you will have an object "block" stored in the "block" variable in your partial.
But if you named your partial "_canvas_block", the variable would then be named "canvas_block" inside your partial.
This works a little bit different from locals as you can see, but it's really cleaner to do it this way. :)
Then in your partial, as you now have a block object stored in the block variable, you just have to call:
<%= block.id %>
A little bit more information in the ruby guide chapter 3.4.4.
You also may be highly interested in reading the next chapter 3.4.5 which deals with passing "collections" to partials. :)