Domanda

Sto cercando di modificare le vestal_versions plugin per accettare un parametro ho impostato al momento del salvataggio. Questo parametro agirà come una nuova bandiera per determinare quando per creare una revisione su aggiorna. Attualmente sarà sempre eseguito su di aggiornamento quando è necessaria una nuova revisione. Ecco l'area interessata di codice del plugin non modificato:

after_update :create_version, :if => :needs_version?

    def create_version
        versions.create(:changes => changes.slice(*versioned_columns), :number => (last_version + 1))
        reset_version
    end 

Il parametro I mando nella vista su inviare è "forcerevision = n". Come faccio a tirare in questo parametro e cosa condizionale dovrei usare per permettere che questo essere eseguito solo quando "forcerevision = y"? Sembra che sarebbe pulito per modificare il filtro after_update?

Qui è il registro dei dati che vengono trasmessi aggiornamento.

Processing NotesController#update (for 521.0.0.1 at 2009-12-05 13:25:45) [PUT]
Parameters: {"authenticity_token"=>"#########################+k=", "id"=>"4", "forcerevision"=>"n", "note"=>{"notebook_id"=>"", "public"=>"n", "body"=>"A versioned note", "title"=>"Version Note Test", "flag"=>"important", "star"=>"false", "tag_list"=>""}}

vestal_versions su Github

È stato utile?

Soluzione

Il modo più pulito per farlo sarebbe quello di aggiungere un attr_accessor quando un modello viene dichiarato essere di versione.

Poi ignorare needs_version? verificare che attributo.

Ovunque nel LaserLemon :: :: VestalVersions ClassMethods # con versione aggiungere questa riga:

attr_accessor :force_reversion

Poi riscrivere LaserLemon :: :: VestalVersions InstanceMethods # needs_version? per controllare questo attributo:

NB. dovuta al modo in cui vengono gestiti caselle "0" è considerato false per le caselle di controllo, campi e booleani, ma è un vero valore in Ruby. Quindi non possiamo controllare se force_reversion non restituisce falso.

def needs_version?
  !(versioned_columns & changed).empty? || 
    ![nil, "0", 0, false].include?(force_reversion)
end

E è tutto pronto. Basta passare qualsiasi valore per force_reversion come se fosse una colonna.

Dopo i cambiamenti di cui sopra con il seguente modello:

classe User

@user.update_attributes(:force_reversion => true, :unversioned_column => new_value)

o in forma:

<%= form_for @user do |f| %>
  <%= f.label :force_reversion, "Force New Version" %>
  <%= f.check_box :force_reversion %>
  ... More fields ...
<% end %>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top