Поскольку вы пытаетесь сделать это способом REST, сначала вам нужно найти ресурс - кое-что, что вы можете запросить с помощью одного из глаголов HTTP.
Я бы сказал, что «вещь», которую мы должны здесь идентифицировать, это статус foo . Переведено в URL:
/foos/:id/status
Состояние конкретного foo является ресурсом - и это первое, что нам нужно, когда мы пытаемся быть REST-совместимым. Когда мы публикуем некоторые foo, это означает, что мы меняем (обновляем) их статус, верно? Итак, что нам нужно сделать дальше, это создать маршрут и метод, который будет обрабатывать запрос «update status of foo».
Чтобы сделать это, просто добавьте это в ваш файл route.rb:
map.connect "/foos/:id/status", :controller => "foos", :action => "change_status", :conditions => { :methods => :put }
и добавьте что-то подобное в ваш файл контроллера foos:
# simplified
def change_status
status_name = params[:status_name]
foo = Foo.find(params[:id])
foo.publish! if status_name == "published"
end
Таким образом, вы получите вполне приличный дизайн RESTful.