Since you are trying to do this in a REST way, what you need to do at first is to find a resource - some thing you can query with one of the HTTP verbs.
I d say that the "thing" we need to identify here is the status of foo. Translated into a URL:
/foos/:id/status
Status of concrete foo is a resource - and that s the first thing we need when trying to be REST compliant. When we publish some foo, it means we change (update) its status, right? So, what we need to do next is to create a route and a method which will handle the "update status of foo" request.
To do this, just add this into your routes.rb file:
map.connect "/foos/:id/status", :controller => "foos", :action => "change_status", :conditions => { :methods => :put }
and add something like this into your foos controller file:
# simplified
def change_status
status_name = params[:status_name]
foo = Foo.find(params[:id])
foo.publish! if status_name == "published"
end
In this manner you ll end up with a quite decent RESTful design.