Ответ, который я получил, был довольно уродлив, но работает как с обновлением, так и с созданием:
<%= form_for(@article, :url => (@article.new_record? ?
articles_path(params[:tab]) : article_path(params[:tab], @article) do |f| %>
Обновление:
Лучшим решением было бы переопределить метод default_url_options на что-то вроде этого:
def default_url_options(options={})
{ :tab => params[:tab] }
end
Тогда <% = form_for @article do | f | Можно использовать%>, и все URL генерируются правильно