At the top of the fine manual you will see an example of exactly what you are trying to do:
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
So you are looking for this:
connection.execute(%Q{ INSERT INTO table (val1) VALUES(#{connection.quote(x)}) ON DUPLICATE KEY UPDATE `val1` = `val1` + #{connection.quote(ruby_variable)} })
Where x is what you are trying to insert, and ruby_variable is what you want to add to val1 when there is a duplicate. You need VALUES for INSERT, not ON DUPLICATE.
source share