47.30.1. Ajax style drag-n-drop sorting

Attributy:

Odkazy:

Tento recept používá plugin 47.29.3 – „Acts As List“.

Postup 47.1. Ukázkový postup

  1. Nejdříve potřebujeme nainstlovat plugin 47.29.3 – „Acts As List“.

    $ script/plugin install acts_as_list
  2. Přidáme do tabulky, která má mít definováno pořadí, sloupeček který tuto informaci bude udržovat. Pokud ještě tabulku nemáme, do migrace přidáme definici sloupce.

        create_table :produkty do |t|
          …
          t.integer :position
          …
        end

    Pokud tabulku již máme, napíšeme si migraci která tento sloupec přidá. V této ukázce se tabulka jmenuje produkty a pro sloupec s pořadím jsem zvolil název position.

    $ script/generate migration add_position_to_produkty
    class AddPositionToProdukty < ActiveRecord::Migration
      def self.up
        add_column :produkty, position, :integer
        counter = 1
        Produkt.all.each do |produkt|
          produkt.position = counter
          produkt.save
          counter += 1
        end
      end
      def self.down
        remove_column :produkty, :position
      end
    end
    $ rake db:migrate
  3. Do modelu naší tabulky přidáme deklaraci acts_as_list

    class Produkty < ActiveRecord::Base
      acts_as_list
      named_scope :ordered, :order => :position
    end
  4. A teď zobrazení našich produktů.

      <tbody id="produkty" style="cursor:move">
        <% @produkty.each do |produkt| %>
          <% id="item_<%= produkt.id %>"%>
          …
      </tbody>
    </table>
    <%= sortable_element 'produkty',
                         :url => { :action => 'sort', :id => @produkty },
                         :complete => visual_effect(:highligth, 'produkty'),
                         :tag => 'tr'
    %>
Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .