I think you passed using Weapon.find(1) because there was only one weapon in the weapons table, but if you create another weapon, with the :id => 1 then your original syntax wouldn't work - cause it only returned the first weapon and not all the weapons.
I passed using, Zombie.find(1).weapons which will return multiple entries for weapons associated with :id = 1, but was also thinking the same as you and wanted to search by :name and not :id.
I was also thinking about using the "where" attribute, but can't get it to work - and when I used @edgerunner answer it returned:
#<ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: zombie.name: SELECT "weapons".* FROM "weapons" WHERE "zombie"."name" = 'Ash'>
so I'm not sure if this is a limitation through the program or what - as it is, im still bit confused.