自分でブラウザ上でテストを行うと成功するのですが、capybaraで行うと失敗します。 以下のように編集画面でsubmitされたらupdateを行うようにしておき

  def update
    #投稿ボタンが押されたらpublishedをtrueに。押されなかったら自動下書き保存。
    published_torf = params[:commit] ? true : false
    if published_torf
      @ranking.update(ranking_params)
      if @ranking.valid?
        @ranking.published = true
        @ranking.save
      end
      respond_with(@ranking)
    else
      @ranking.attributes = ranking_params
      @ranking.save validate: false
    end
  end

以下のようにcapybaraを動作させました。

require 'rails_helper'

#deviseのテストヘルパー
include Warden::Test::Helpers
Warden.test_mode!

describe 'ログイン処理' do
  let(:user) { create(:user) }
  let(:category) { create(:category) }
  describe '投稿・編集' do
    before(:each) do
      category
      login_as(user, :scope => :user)
    end
    scenario '投稿・編集成功' do
          visit root_path
          click_button '投稿'
          fill_in 'ランキングタイトル', with: 'タイトルですよ'
          find('#ranking_ranking_posts_attributes_0_title').set('記事タイトル3')
          find('#ranking_ranking_posts_attributes_1_title').set('記事タイトル2')
          find('#ranking_ranking_posts_attributes_2_title').set('記事タイトル1')
          all('#edit').first.set('hey')
          all('#edit')[1].set('hey')
          all('#edit')[2].set('hey')
          #投稿ボタンをクリックするとなぜかデータベースから存在していた編集中の記事が消える
          click_button '投稿'
          expect(page).to have_content 'タイトルですよ'  # => エラー発生
    end
  end
end

すると、以下のようなエラーが発生しました。

Failure/Error: expect(page).to have_content 'タイトルですよ'
       expected to find text "タイトルですよ" in "RankingHook 100 P 新着順 Bootflat PORTFOLIO Web Design Branding & Identity Mobile Design Print User Interface ABOUT The Company History Vision GALLERY Flickr Picasa iStockPhoto PhotoDune CONTACT Basic Info Map Conctact Form Copyright © 2014 Flathemes.All rights reserved."

pryで確認してみると、送信ボタンを押すとデータベースから記事が消えます。

ちなみに自動下書き保存機能をつけるため以下のように、新しくレコードが作られた場合保存してedit画面に飛ばすようにしています。

  def new
    @ranking = Ranking.new
    #この数字をcurrentuserの数字にする
    @ranking.posts_sum.times {
      @ranking.ranking_posts.build
    }
    @ranking.user = current_user
    @ranking.save validate: false
    redirect_to edit_ranking_path @ranking
  end

  def edit
  end

ごちゃごちゃしてしまいましたが、よろしくお願いします。

---追記---

以下がformです。

<%= form_for(@ranking) do |f| %>
        <div class="row category_select">
          <div class="field col-sm-12">
            <div class="col-sm-4">
              <%= f.label :category_id %>を選択してください。
              <br/>
              <%= f.collection_select(:category_id, @categories, :id, :name, {}, {class: 'form-control'}) %>
            </div>
          </div>
          <div class="clearfix"></div>
        </div>
        <div class="edit-rankingtop row">
          <div class="field col-sm-2 col-xs-12">
            <strong id="top_image_label">トップ画像</strong><br/>
            <% if @ranking.image.thumb %>
                <%= image_tag @ranking.image.thumb, size: '65', id: 'top_image_thumb' %>
            <% end %>
            <div class="field">
              <%= f.file_field :image %>
              <br>
              <%= f.hidden_field :image_cache %>
            </div>
          </div>
          <div class="field col-sm-10 col-xs-12">
            <%= f.label :title %>
            <br>
            <%= f.text_area :title, class: 'form-control', placeholder: '150文字以内に詰め込もう' %>
          </div>
          <br/>

          <div class="field">
            <%= f.hidden_field :user_id, :value => current_user.id %>
          </div>
          <div class="clearfix"></div>
        </div>
        <!--自動下書き保存機能の通知場所-->
        <% unless @ranking.published == true %>
            <div class="create-temp col-sm-12 col-xs-12"></div>
        <% end %>

        <br/>
        <% i = @ranking.posts_sum %>
        <div class="col-sm-10 col-xs-12 row">
          <div class="field col-sm-12">
            <%= f.fields_for :ranking_posts, @ranking.ranking_posts do |p| %>
                <br/>
                <h4>第<%= i %>位</h4>

                <%= p.hidden_field :rank, :value => i %>

                <div class="field">
                  <%= p.label :title %>
                  <%= p.text_field :title, class: 'form-control' %>
                </div>

                <div class="field">
                  <%= p.label :description %>
                  <%= p.text_area :description, class: 'form-control', id: 'edit' %>
                </div>

                <% i = i-1 %>
            <% end %>
          </div>

          <div class="actions col-sm-6 col-xs-12">
            <%= f.submit '投稿', :class => 'btn btn-success btn-block' %>
          </div>
    <% end %>

それと、RankingとRankingPostモデルも載せておきます。

class Ranking < ActiveRecord::Base
  belongs_to :user
  belongs_to :category
  has_many :ranking_posts, dependent: :destroy
  accepts_nested_attributes_for :ranking_posts
  mount_uploader :image, ImageUploader
  #順番
  default_scope -> { order('created_at DESC') }

  validates :title, :presence => true, length: {maximum: 150}
  validates :category_id, :presence => true
  validates_associated :ranking_posts, message: 'を完成させてください。'
end

class RankingPost < ActiveRecord::Base
  belongs_to :ranking
  default_scope -> { order('rank DESC') }
  validates :title, :description, :rank, presence: true
end

です。よろしくお願いします。