Domanda

Al momento sto sviluppando un paio di moduli per il riutilizzo del codice dai miei controllori su un Rails 3 utilizzando InheritedResources (ultima versione) app.

La mia idea è quella di avere un comportamento che dovrebbe essere eseguito dopo creare un successo o un aggiornamento della risorsa, ma, se non da redeclaring le azioni o "creare" "update", io non sono di sicuro su come affrontare questo.

Attualmente sto usando qualcosa come

module SessionStorable

  extend ActiveSupport::Concern
  include Base

  included do
    before_filter :setup_resource, :only => :new
    after_filter :reset_session_resource_id, :only => [:create, :update]
  end


  # ....

end

Ho un uso particolare ho messa a punto delle risorse, che, tra le altre cose, aggiunge l'id della risorsa alla sessione. Dopo che la risorsa è di essere salvato con successo alla BD, mi piacerebbe per rimuoverlo di id dalla sessione e questo è ciò che l'after_filter fa.

Non ho affare con esso finora anche salvare le informazioni updated_at sulla sessione e il confronto per vedere se il modello è stato aggiornato (in tal caso, avrebbe dovuto essere successo) ed eseguire il metodo.

Comunque, io non sono a felice con esso (kinda hacky) e anche io sto pensando di avere altri moduli che funzionano con risorse anche dopo che sono stati aggiornati e non vorrebbe utilizzare lo stesso approccio per due volte .

C'è un gancio su IR che dovrei usare? O altre idee su come procedere?

È stato utile?

Soluzione

ho risolto utilizzando il "object.errors.empty?" condizione. Se non ci sono errori sull'oggetto dopo il

creare o azione di aggiornamento, dovrebbe essere lecito ritenere che il modello è stato salvato correttamente, e l'esecuzione in tal modo il codice andrebbe bene.

Altri suggerimenti

Forse si potrebbe usare un approccio basato eredità invece:

class BaseController < InheritedResources::Base

before_filter :setup_resource, :only => :new
after_filter :reset_session_resource_id, :only => [:create, :update]

# ...
end

class YourController < BaseController
# ...
end

Mi dispiace per utilizzare la funzione di risposta per un commento, ma visto che non posso farlo sotto la tua risposta non vedo altra scelta.

"object.errors.empty?" condizione. Se non ci sono errori sull'oggetto dopo la creazione o azione di aggiornamento, dovrebbe essere lecito ritenere che il modello è stato salvato correttamente

Credo che questo non è sempre vero, mi permetta di mettere te e esempio:

class Project < ActiveRecord:Base
  has_many :members
  # ...
end

Immaginate hai un modulo per il progetto in cui si potrebbe anche creare membri per esso (forme nidificate). Gli errori nella creazione dei membri associati faranno de valida oggetto del progetto, ma l'istanza progetto restituirà true per il metodo errors.empty?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top