It looks to me like there was a bug in rails 3.2.3 - I don't see this problem with 3.2.12 but I'm not sure when it got fixed.
That said, an easier way to approach this may be to use the reject_if option for accepts_nested_attributes_for:
class Ticket < ActiveRecord::Base
has_many :picks
accepts_nested_attributes_for :picks,
:reject_if => lambda { |attributes| attributes[:weight].to_i == 0 },
:allow_destroy => true
attr_accessible :picks_attributes
end
This will silently reject all new picks that have a weight of 0. The only thing it doesn't address is the update case if you want existing picks to be deleted when they are updated to have a weight of 0, but you have a remove pick link to allow for that anyway.