The source of the error message is this part of your code
findById(c.id)
This part is the same for all four examples given. Thus the same error message.
findById( id ) expects an Int as an argument but c.id returns an Option[Int].
A possible solution would be to map over c.id
c.id map ( id => findById(id) update c )
then it would return an Option[Int] as required by your update2.
Or you could use a for comprehension which would return an Int as your function update requires.
for {
id <- c.id
elem = findBy(id)
} yield elem.update(c)